Math.atan(), возвращающий ввод
У меня проблема с Math.atan, возвращающим то же значение, что и входные данные.
public double inchToMOA( double in, double range){
double rangeIn = 36*range;
double atan = (in / rangeIn) * -1.0;
double deg = Math.atan(atan);
double moa = deg * 60;
return moa;
}
У меня все это было в одной строке, но я разбил его на разные переменные, чтобы посмотреть, смогу ли я выяснить, почему это не работает. если = -10 и диапазон = 300, то atan составляет около -.00094. Угол должен быть около -053 градусов, но math.atan возвращает -.00094, так же, как и вход.
Мой номер слишком мал для math.atan?
3 ответа
Обратная касательная описана здесь:
http://mathworld.wolfram.com/InverseTangent.html
Я не думаю, что ваш аргумент является проблемой здесь.
Вы, конечно, понимаете, что компьютерные триггерные функции работают в радианах, а не в градусах, верно?
Там нет ничего плохого в Math.atan
, Его значение почти 1:1 линейное, пересекающее начало координат, для входов, близких к нулю. Таким образом, чем ближе вы к нулю, тем меньше будет изменение от ввода.
Это может быть просто. Если вы посмотрите на строгое определение касательной функции в математике, что вы видите, если это tan(x) = sin(x)/cos(x)
для малых значений "х"
lim x->0, sin(x) = x
lim x->0, cos(x) = 1
следовательно, вы могли видеть, что lim x->0, tan(x) -> x
это означает, что он обратный, arctan, возвращает значение, которое ему дано. Что касается числовой точности Math.atan, я думаю, что авторы приложили большие усилия, чтобы обеспечить его числовую точность.