使用Wallis乘积计算π结果偏差大,是代码错误还是浮点误差?
用Wallis乘积计算π的问题分析
你的代码逻辑没问题,偏差大不是代码错误,而是Wallis乘积本身收敛极慢的特性导致的。
具体说明:
- Wallis乘积的公式是 $\pi/2 = \prod_{i=1}^n \frac{4i2}{4i2-1}$,你的代码完全符合这个公式:初始乘积为1,依次乘每一项后再乘2得到π的近似值。
- 100次迭代得到≈3.13是正常结果——这个方法收敛速度非常慢,想要接近π的真实值(3.14159265...)需要大量迭代:
- 1000次迭代后,结果约为3.14058,误差缩小到0.001左右;
- 10000次迭代后,结果约为3.14149,误差在0.0001级别;
- 要得到小数点后5位的精度,需要几十万次迭代。
优化后的代码(更高效)
没必要用列表存储所有中间项,直接迭代计算乘积即可,节省内存:
product = 1.0 iterations = 10000 for i in range(1, iterations + 1): term = 4 * i**2 / (4 * i**2 - 1) product *= term pi_approx = product * 2 print(pi_approx)
内容的提问来源于stack exchange,提问作者Álvaro
相关产品推荐
相关产品推荐

