js Math.PI值不能像它应该计算出来的那样

时间:2015-05-13 03:10:53

标签: javascript

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

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

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

1 个答案:

答案 0 :(得分:2)

您的问题是规模与精确度相结合。 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度),这给你一个完全不同的正弦波位置!