使用Machin方法估算pi的精度问题

时间:2019-05-13 16:08:53

标签: python-3.x math

我需要使用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个值。

1 个答案:

答案 0 :(得分:2)

好的,我已经解决了这个问题。我不知道为什么会在python中发生这种情况,但是调用我这样编写的函数machinpi(Decimal(1/5),Decimal(1/239),terms)不等于这个,它具有我期望的machinpi(十进制(1)/十进制(5),十进制(1)/十进制(239),术语)