JS Math.pi值不像应有的那样计算


Math.sin(75 * (180/3.14)); -> 0.9956310419973837
Math.sin(75 * (180/Math.PI)); -> -0.4927842805101025

上面从Acrobat中的JS调试器复制。我不明白为什么。第一个值(.995 ....)是正确的。任何帮助/解释都将不胜感激。

您的问题是比例与精度相结合。75*180约为13,500,这就是您要乘以Pi的近似值。在此规模上,即使是小乘法变化也会导致范围内差异很大。结合在一起,即您使用的是PI(3.14)与更精确的近似值(Math.PI)的粗略近似,这为您提供了这一点的很大可变性。在Wolfram Alpha上尝试这两个计算,您会发现JavaScript给出了一致和正确的答案。

正弦函数将返回与正弦函数的y值对应的结果。因此,在此规模上,将放大一个非常小的乘法误差(Math.PI - 3.14)。考虑:

1 * (Math.PI - 3.14) = 0.0015926535897929917
13500 * (Math.PI - 3.14) = 21.50082346220539

(这不是错误的完整计算,而只是表演很重要的演示。)

这表明,大约1,3.14和Math.PI之间的差异并不能真正使您移动那么远(0.00159弧度或0.09度)。在4298左右,它会使您移动21.5弧度(或1231.9度),这使您在正弦波上的位置完全不同!

最新更新