1、 1直到第n项的绝对值小于等于10-6为止求出π的值;2直到第n项的绝对值小于等于10-8为止求出π的值;3尝试逐步减小第n项绝对值但是不要一次减小太多记录每次得到的π的值。
这是一个求解圆周率的问题,可以利用莱布尼茨级数:
π/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/bHyy 著作权归作者所有。请勿转载和采集!