我需要使用Machin方法估算pi到小数点后100位。 4(4(arctan(1/5))-arctan(1/239))= pi。
众所周知,该公式可以很快地收敛到pi,其来源在50次迭代/项中将精度精确到小数点后72位。
使用Machin公式,我最多只能达到小数点后15位的精度,而且我不知道为什么。
我为arctan(x)的泰勒级数编写了一个函数,然后在另一个函数中使用了该函数,该函数应用了我上面编写的公式。我也尝试过使用Decimals模块设置更高的精度。
##This is the function for the taylor series of arctan(x)
def arctan(first_term, terms):
k = 0
array = []
if k < 1:
x = (((-1)**k)*(first_term)**((2*k)+1))/((2*k)+1)
k = 1
array.append(x)
if k > 0:
while k < terms:
x = x + (((-1)**k)*(first_term)**((2*k)+1))/((2*k)+1)
k += 1
array.append(x)
return array[-1]
##Here is the function for Machin's formula
def machinpi(first_term, first_term2, terms):
x = 4*(arctan(first_term, terms))-(arctan(first_term2, terms))
return x*4
Machin以手工估算pi到小数点后100位而闻名。我试图找出要达到此精度所需的级数。但是,如果我不能先收敛到pi的100个小数位,就找不到答案。使用Machin公式,我希望在50次迭代中收敛到小数点后的72个值。
答案 0 :(得分:2)
好的,我已经解决了这个问题。我不知道为什么会在python中发生这种情况,但是调用我这样编写的函数machinpi(Decimal(1/5),Decimal(1/239),terms)不等于这个,它具有我期望的machinpi(十进制(1)/十进制(5),十进制(1)/十进制(239),术语)