Javascript 用JS实现数学表达式舍入

Javascript 用JS实现数学表达式舍入,javascript,math,Javascript,Math,表达式结果是1.2246467991473532e-16,但我想得到0,但如果我使用 let e = Math.sin(Math.PI); document.write(e) ε是一个非常小的数字,如1e-10,则不要将表达式四舍五入到0 如果我使用Math.cos(Math.PI/2)它会给我6.123233995736766e-17,但我想得到0 因此,我想确保它每次都能给我准确的答案。您看到的是()浮点舍入错误,它正在按预期工作。结果“1.2246467991473532e-16”采用科

表达式结果是
1.2246467991473532e-16
,但我想得到
0
,但如果我使用

let e = Math.sin(Math.PI);
document.write(e)
ε是一个非常小的数字,如1e-10,则不要将表达式四舍五入到
0

如果我使用
Math.cos(Math.PI/2)
它会给我
6.123233995736766e-17
,但我想得到
0

因此,我想确保它每次都能给我准确的答案。

您看到的是()浮点舍入错误,它正在按预期工作。结果“
1.2246467991473532e-16
”采用科学记数法,表示约1.22×10的极小值⁻¹⁶.

正如John所说,这个错误的原因是π没有精确地表示为浮点值,引入了(非常小的)舍入误差。最接近π的64位浮点值约为

e = Math.sin(Math.PI+epsilon)
与精确值更接近

Math.PI = 3.141592653589793116...
误差约为1.22×10⁻¹⁶. 正弦函数满足“约化公式”

利用它,我们得到

sin(π − x) = sin(x).
其中最后一步使用sin(x)≈ x表示接近0的x(一阶泰勒近似,又名小角度近似)。这解释了为sin(Math.PI)看到的结果“
1.2246467991473532e-16

如果不想看到这个小的舍入错误,可以使用类似于
result.toFixed(9)
(请参阅)的内容对结果进行舍入

有关浮点运算怪癖的温和介绍,请参见。

您所看到的是()浮点舍入错误,它正按预期工作。结果“
1.2246467991473532e-16
”采用科学记数法,表示约1.22×10的极小值⁻¹⁶.

正如John所说,这个错误的原因是π没有精确地表示为浮点值,引入了(非常小的)舍入误差。最接近π的64位浮点值约为

e = Math.sin(Math.PI+epsilon)
与精确值更接近

Math.PI = 3.141592653589793116...
误差约为1.22×10⁻¹⁶. 正弦函数满足“约化公式”

利用它,我们得到

sin(π − x) = sin(x).
其中最后一步使用sin(x)≈ x表示接近0的x(一阶泰勒近似,又名小角度近似)。这解释了为sin(Math.PI)看到的结果“
1.2246467991473532e-16

如果不想看到这个小的舍入错误,可以使用类似于
result.toFixed(9)
(请参阅)的内容对结果进行舍入


有关浮点运算怪癖的温和介绍,请参阅。

Math.sin(Math.PI);不返回0,因为Math.PI不是π。这是不合理的,但如果我使用Math.cos(Math.PI)它会给我正确的答案-1这能回答你的问题吗?Math.sin(Math.PI);不返回0,因为Math.PI不是π。这是不合理的,但如果我使用Math.cos(Math.PI)它会给我正确的答案-1这能回答你的问题吗?