我知道之前已经问过这个问题,但我找不到答案。 我正在尝试创建一个准确计算pi到x位置的函数。 到目前为止,这是我的代码:
function odd(num) { return num % 2;}
var pi = 3;
var x=2;
for (var acc = 1; acc < 30000; acc++) {
if (Odd(acc)) {
pi = pi + (4/(x * (x+1) * (x+2)));
} else {
pi = pi - (4/(x * (x+1) * (x+2)));
}
x=x+2;
}
console.log(pi);
这样可行,但如何指定长度,同时确保其保持准确?
答案 0 :(得分:0)
由于此系列是交替的,部分和的误差总是小于下一个术语的绝对值。基本上n
术语之后的错误大约是1/(2*n^3)
。
此外,对于浮点运算,您将获得幅度为n*1e-16
的误差,因此可获得的最佳结果将是大约n=1e4
,误差幅度为1e-12
。
第二个想法,从最小到最大项的求和将避免大浮点误差的累积,因为下一个误差是关于下一个项的大小乘以机器ε的量值。因此,总误差将具有与绝对和成比例的界限,绝对和是小5e-15
的有限值。这种反向求和应该允许几乎无差错的计算,直到n^3=10^15
或n=10^5
有15个正确的位置。