Почему Math.cos(90 * Math.PI/180) дает 6.123031769111... и не равен нулю? - программирование
Подтвердить что ты не робот

Почему Math.cos(90 * Math.PI/180) дает 6.123031769111... и не равен нулю?

Я конвертирую градусы в радианы (градусы * Math.PI/180), но почему следующее:

Math.cos(90 * Math.PI/180)

выход 6.123031769111... и не равен нулю

Я пытаюсь выполнить 2D-поворот, использует матрицы, и результаты полностью выходят из строя.

4b9b3361

Ответ 1

Вывод

Math.cos(90 * Math.PI/180)

является

6.123031769111886e-17

Обратите внимание на e-17 в конце, что означает, что это число равно 6.123 x 10 -17. Это число, так исчезающе близкое к 0, что оно эффективно 0. Причина, по которой он не является тождественно 0, связан с ошибками округления в двойном формате IEEE-754, который мешает вам получать точное представление & pi;/2 и вызывает ошибки минимального округления при расчете косинуса.

Кстати, я был очень удивлен, когда результат вернулся с 6! Это только после того, как я посмотрел на самый конец, что все стало иметь смысл.

Надеюсь, это поможет!

Ответ 2

6.123233995736766e-17

- научное обозначение для очень небольшого числа, близкого к нулю. Это не совсем нулевое из-за ошибок округления и т.д.

Ответ 3

6.123233995736766e-17 очень близок к нулю. Просто округлите число.