Почему доза cos (90) не равна нулю?

Я понимаю, что cos (); в C ++ использует радианы правильно .. и вы можете получить радианы с помощью ..

 (angle * PI ) / 180;

Так почему же

 float value = cos( (90 * PI / 180 ); // == 6.1 etc... and not 0?

Если я использую научный калькулятор в Windows для cos(90) Я получаю ноль. Тем не менее, как эксперимент, когда я толкаю cosh(90), Я получаю то же значение 6.1 и т.д …, которое дал мне вызов функции в C ++.

Есть идеи, что происходит? Вот мой код, как сейчас …

http://ideone.com/YQgLz

В основном я спрашиваю, почему cos(90 degrees) в C ++ возвращается с тем же номером, что и делать cosh(90) на калькуляторе windows. не cos(90 degrees) должен быть равен нулю в любом случае?

-7

Решение

Таким образом, вы на самом деле не получили 6.1 (значение косинуса / синуса больше 1 возможно только для некоторых комплексных чисел), но 6.1 * 10 ^ -17. Дело в том, что числа с плавающей точкой не являются точными значениями (по природе — так работает представление base-2), а математические функции не возвращают точных значений — они используют различные формулы аппроксимации для вычисления значения — никогда не ожидайте, что они будут точными.

2

Другие решения

Других решений пока нет …