答案 0 :(得分:1)
尝试沿着这些线条(从图像转录),增加近似项n
内部无限while
循环的数量:
s = 1
n = 1
while true
s = abs(pi - approximate_pi(n))
if s <= 0.001
break
end
n = n + 1
end
在相关的说明中,如果您事先知道pi
的值,则此计算有点无意义。终止条件应在n-th
项的绝对量值上。
只有当你试图找出你的逼近序列在某个误差范围内产生结果的最小n
时,你的方式才有意义。
修改即可。所以,通常你会这样做:
n = 1;
sum_running = 0
sum_target = (pi^2 - 8) / 16;
while true
sum_running += 1 / ((2*n-1)^2 * (2*n+1)^2);
if abs(sum_target - sum_running) <= 10e-12
break
end
n += 1;
end
pi_approx = sqrt(16*sum_running + 8)
对于每个新pi
,无需为n
项重新计算n
近似值。这具有O(n)
复杂度,而您的初始解决方案为O(n^2)
,因此对于大型n
来说速度要快得多。