Math.sin返回意外结果

时间:2013-12-16 12:48:29

标签: java

Math.sin(Math.PI)返回1.2246467991473532E-16

Math.sin(-Math.PI)返回-1.2246467991473532E-16

但一定不能归零吗?

虽然来自3.143.15的罪是正确的。

3 个答案:

答案 0 :(得分:11)

Math.PI不是“完全”π,它只是π的近似16位数近似值(3.141592653589793)。没有浮点格式可以精确地存储π。这就是为什么你没有得到确切的零。

答案 1 :(得分:2)

您无法完全代表PI,因此您无法获得准确的结果。如果您认为这是一个错误,我建议您完成结果。

将其打印为(int)Math.sin(Math.PI),您将获得0

请注意,Math.sin到int将始终给出0或-1

答案 2 :(得分:2)

计算机中浮点函数的本质是它们不精确(参见Drop中的链接)。

如果要在功能点之后将值最多舍入为2(或任何)数字,则可以执行

    (Math.rint(1e2*Math.sin(Math.PI)))/1e2