Math.cos为大值提供了错误的结果

时间:2012-12-23 14:09:45

标签: java

我已经看到了一些答案,但我还没有找到适合我的答案。当我尝试这个时:

return Math.cos(270.* Math.PI/180); 

我得到了

-1.8369701987210297E-16

while: -

Math.cos(Math.toRadians(270.) // gives:-1.8369701987210297E-16

我原以为这会给0。

3 个答案:

答案 0 :(得分:5)

数字-1.8369701987210297E-16接近零的数字的scientific representation。它相当于这个数字:

-0.000000000000000018369701987210297

浮点运算不精确。您应该期望小的表示错误。特别是,不可能将irrational number像pi一样完全表示为浮点数。

答案 1 :(得分:1)

Math.PI是近似值,因此您将获得zero的近似值。

尝试使用误差范围epsilon,其值大约为1E-16。 因此,如果cos结果不如epsilon那意味着它是null。

您还可以开发自己的修改后的cos函数。

答案 2 :(得分:0)

浮点数情况下不完美精度的另一个例子。你转换它会导致一个不完美的0值。然而,它非常接近于零。

它与大值无关。如果是浮点数,总是会出现细微差别。