通过计算前几项的和来逼近π

2024-09-30 04:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

常数π是一个无理数,其值约为3.1415928。π的精确值等于这个无穷和:π=4/1−4/3+4/5−4/7+4/9−4/11+…我们可以通过计算前几个项的和得到π的一个很好的近似值。编写一个函数approxPi(),将浮点值误差作为输入,通过逐项计算前一个和来逼近误差内的常数π,直到当前和与前一个和(少一个项)之间的差不大于误差。函数应该返回新的和。(提示:π1=4/1;π3=4-4/3;π5=4-4/3+4/5。。。πi=πi-2+符号*4/i,其中符号=-1或1) 近似值(0.01)3.146567471829556 近似值(0.0000001)3.1415927035898146 我的密码是

def approxPi(num): 
prev=1
current=2
i=1
while current-prev>num:
    prev=current
    current+= 4-(4/i)
    i += 1
return current

这只是给我2虽然,任何建议都会有所帮助。你知道吗


Tags: 函数密码returndef常数符号currentnum
2条回答

这个实现更习惯于python,更容易理解。你知道吗

def approxPI(n):
   cal1 = [1.0/float(i) for i in range(1, n, 4)]
   cal2 = [1.0/float(i) for i in range(3, n, 4)]
   pi = (sum(cal1)-sum(cal2)) * 4
   return pi
print(approxPI(400000))

这是相当快的,计算400000系列在0.05秒的台式电脑上

代码的更正版本如下

def approxPi(num): 
prev=1
current=2
i=1
sign = 1;
while abs(current-prev)>num:
    prev=current
    current+= sign * (4/i)
    sign = -sign
    i += 2
current -= 2
return current

数列的每一个分数的分母是2加上前一个,因此i += 2sign = -sign用于在序列中交替使用正负号。current -= 2是从序列中减去2,因为current = 2是序列的第一个值。最后,需要abs()来获得误差的绝对值,因为它可以在正误差值和负误差值之间交替。你知道吗

相关问题 更多 >

    热门问题