Javascript Math.cos和Math.sin不准确。有什么解决办法吗?
Javascript数学三角法返回错误的结果。 试一试 它不返回0Javascript Math.cos和Math.sin不准确。有什么解决办法吗?,javascript,math,Javascript,Math,Javascript数学三角法返回错误的结果。 试一试 它不返回0 可能问题在于javascript十进制数字精度。是否有任何一轮训练来获得正确的结果?但这非常非常接近于零。(~10^-16) 并且alert(Math.sin(Math.PI/2))会返回1 这只是处理浮点运算时必须小心的事情之一。舍入错误到处都会出现。您可以使用 Math.sin(Math.PI).toFixed(3)/“0.000” 示例: constcos=(a)=>Math.cos(Math.PI*a/180); cos
可能问题在于javascript十进制数字精度。是否有任何一轮训练来获得正确的结果?但这非常非常接近于零。(~10^-16) 并且
alert(Math.sin(Math.PI/2))
会返回1
这只是处理浮点运算时必须小心的事情之一。舍入错误到处都会出现。您可以使用
Math.sin(Math.PI).toFixed(3)/“0.000”
示例:
constcos=(a)=>Math.cos(Math.PI*a/180);
cos(90)//6.123233995736766e-17
然后可以使用.toFixed()
cos(90).toFixed(3)/“0.000”
注
.toFixed()
返回字符串,因此可以使用parseFloat()将其解析为float()
parseFloat(cos(90).toFixed(3))//0.000<代码>1.2246467991473532e-16相当小,四舍五入将转换为
0
。好吧,JS的Math
不是为高精度数学而开发的:-(可能是重复的,也可能是几百个。有限精度的悲哀…(即使1-Math.pow(Math.cos(Math.PI),2)==0
)也许你应该读一读“每个计算机科学家都应该知道的浮点算法”当前位置刚刚注意到这一点。简直是胡说八道。你可能会认为他们可以通过优化sin
来给出正确的答案。
alert(Math.sin(Math.PI));