莱布尼茨公式计算圆周率 π:精度控制与逐步逼近
这是一个求解圆周率的问题,可以利用莱布尼茨级数:
π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...
根据莱布尼茨级数的收敛性,当项数越多时,级数的值越接近π/4。因此,只需要计算足够多的项数,就可以得到足够精确的π值。
(1) 直到第 n 项的绝对值小于等于 10^-6 为止求出 π 的值:
设当前项数为 k,循环计算直到第 k 项的绝对值小于等于 10^-6:
pi = 0
sign = 1
k = 1
term = sign / k
while abs(term) >= 1e-6:
pi += term
sign = -sign
k += 2
term = sign / k
pi *= 4
(2) 直到第 n 项的绝对值小于等于 10^-8 为止求出 π 的值:
同理,只需要将精度改为 10^-8 即可:
pi = 0
sign = 1
k = 1
term = sign / k
while abs(term) >= 1e-8:
pi += term
sign = -sign
k += 2
term = sign / k
pi *= 4
(3) 尝试逐步减小第 n 项绝对值,但是不要一次减小太多,记录每次得到的 π 的值。
可以采用二分法的思想,每次将项数增加一倍,计算出新的 π 值和旧的 π 值之差,如果差值小于设定的阈值,则认为已经达到了目标精度,否则继续增加项数并计算。
pi_old = 0
pi_new = 0
sign = 1
k = 1
term = sign / k
diff = 1
while abs(diff) > 1e-10:
pi_old = pi_new
for i in range(2):
pi_new += term
sign = -sign
k += 2
term = sign / k
diff = pi_new - pi_old
pi_new *= 4
原文地址: https://www.cveoy.top/t/topic/naZn 著作权归作者所有。请勿转载和采集!