为什么cos(90)不等于零?

时间:2012-09-21 05:26:00

标签: c++ floating-accuracy cos

我明白cos();在c ++中使用弧度正确...你可以用..来获得弧度。

 (angle * PI ) / 180;

那为什么呢

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

如果我在cos(90)的窗口中使用科学计算器,我会得到零。然而作为一个实验,当我按cosh(90)时,我得到了相同的6.1等...在C ++中调用函数的值给了我。

任何想法是怎么回事?这是我现在的代码......

http://ideone.com/YQgLz

我问的基本原因是为什么C ++中的cos(90 degrees)与在Windows计算器上执行cosh(90)的数字相同。不管怎样cos(90 degrees)不应该为零?

1 个答案:

答案 0 :(得分:3)

所以你没有真正得到6.1(大于1的余弦值/正弦值只能用于某些复数),但6.1 * 10 ^ -17。问题是浮点数不是精确值(本质上 - 这就是base-2表示的工作方式),数学函数也不会返回精确值 - 它们使用各种近似公式来计算值 - don不能指望它们是准确的。