Программа работает очень медленно особенно для земли и солнца, все время пишет один и тот же результат, есть возможность ее оптимизировать?
Задача : Сатурн и Земля находятся далеко от звезд, на них не действуют ни какие силы кроме силы притяжения. Через какое время Земля и Сатурн столкнутся если растояние между ними 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 {
есть какие-то идеи для оценки времени до столкновения? скажем так, если это миллиарды лет и ты по времени бежишь с интервалом одной миллисекунды... как долго это займёт? даже для программы...
и имеет ли смысл весь этот период перед столкновением?
Точность избыточна, это первое. Второе, можно заменить вычисление степеней десятки константами, просчитанными заранее на калькуляторе.
Критерий касания тоже непонятный: должна быть сумма радиусов тел, а там опять одна тысячная.
В общем, навести бы порядок в исходных данных: привести всё к метрам и секундам, как в международной системе единиц.
Пожалуйста имейте ввиду, что этот пользователь забанен
Действительно, какой смысл в цикле?
У тебя же система простейших дифференциальных уравнений, которая, вероятнее всего, решается аналитически. И в полученную ручкой на бумаге формулу просто подставляем расстояния и массы планет.
Что касается твоего кода, то НИКОГДА не используй float - из-за этого ты получаешь слишком большую погрешность вычислений. Выбрось, на фиг, все (float) из кода и замени типы переменных с float на double.