Вопрос Почему моя программа работает медленно?

Регистрация
25 Май 2013
Сообщения
91
Репутация
0
Спасибо
0
Монет
0
Программа работает очень медленно особенно для земли и солнца, все время пишет один и тот же результат, есть возможность ее оптимизировать?

Задача : Сатурн и Земля находятся далеко от звезд, на них не действуют ни какие силы кроме силы притяжения. Через какое время Земля и Сатурн столкнутся если растояние между ними 1.2 * 10 ^9 км

код :

package ru.vassaev.mark;

import java.math.*;



class Body{

private float m1;



public float getM() {

return m1;

}



public void setM(float m1) {

this.m1 = m1;

}

float S(float m2,float R,float dt){

float G = (float) (6.67 * Math.pow(10,-11));

float a = (G * m2/((float)Math.pow(R,2)));

float S = ((a * dt * dt )/2);

return S;

}

}



public class CerezKakoeVremyaZemlyaUpadetNaSaturn {

public static void main(String[] args) {

Body Земля = new Body();

Земля.setM((float) (5.9736 * (float) Math.pow(10,24)));

Body Сатурн = new Body();

Сатурн.setM((float) (2 * Math.pow(10,26)));

float R = 150 * (float) Math.pow(10,9);

float dt = (float)0.001;

float t = 0;

while (R >= 0.001){

R = R - Земля.S(Сатурн.getM(),R,dt) - Сатурн.S(Земля.getM(),R,dt );

t+=dt;

System.out.println(R);

}



System.out.println(t);

}

}
 
джаву плющит от твоего кода...

есть какие-то идеи для оценки времени до столкновения? скажем так, если это миллиарды лет и ты по времени бежишь с интервалом одной миллисекунды... как долго это займёт? даже для программы...
и имеет ли смысл весь этот период перед столкновением?
 
Точность избыточна, это первое. Второе, можно заменить вычисление степеней десятки константами, просчитанными заранее на калькуляторе.
Критерий касания тоже непонятный: должна быть сумма радиусов тел, а там опять одна тысячная.
В общем, навести бы порядок в исходных данных: привести всё к метрам и секундам, как в международной системе единиц.
 
Пожалуйста имейте ввиду, что этот пользователь забанен
Действительно, какой смысл в цикле?
У тебя же система простейших дифференциальных уравнений, которая, вероятнее всего, решается аналитически. И в полученную ручкой на бумаге формулу просто подставляем расстояния и массы планет.

Что касается твоего кода, то НИКОГДА не используй float - из-за этого ты получаешь слишком большую погрешность вычислений. Выбрось, на фиг, все (float) из кода и замени типы переменных с float на double.
 
А цикл тут зачем?
 
Назад
Сверху