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, я думаю, что авторы приложили большие усилия, чтобы обеспечить его числовую точность.

Другие вопросы по тегам