如何使用python 2.7计算pi到1000位?

时间:2019-02-07 17:29:52

标签: python python-2.7 pi

我想在python 2中将pi设为一个大数字,但是代码不起作用-它只是关闭了,我想看看它需要多长时间。

from decimal import Decimal, getcontext
from time import time, strftime
import datetime

def arccot(x, digits):
    getcontext().prec = digits
    total = 0
    n = 1  
    while Decimal((2 * n - 1) * x ** (2 * n - 1)) < Decimal(10 ** digits):
        term = ((-1)**(n - 1)) * 1 / Decimal((2 * n - 1) * x ** (2 * n - 1))
        total += term
        n += 1
    return total

def pi(decimals):
    timestart = time()
    print "pi = " + str(Decimal(4 * (4 * arccot(5, decimals + 3) - arccot(239,
        decimals + 3))).quantize(Decimal(10) ** (-decimals)))
    timeelapsedint = round(time() - timestart, 2)
    timeelapsedstr = str(datetime.timedelta(seconds = round(
        timeelapsedint, 0)))
    print "runtime: " + timeelapsedstr + " or " + str(
        timeelapsedint) + " seconds."

1 个答案:

答案 0 :(得分:1)

只需调用您的函数(注意最后一行):

# Pi Calculator

# Python 2.7.3

# After running, type "pi(n)" where n is the number of decimals for pi.  For

#  example, if you would like to calculate 100 decimals for pi, type "pi(100)".



# import python libraries

from decimal import Decimal, getcontext

from time import time, strftime

import datetime

# arccot function using power formula arccot = 1/x - 1/(3x^3) + 1/(5x^5) ...

def arccot(x, digits):

    # set precision and starting values

    getcontext().prec = digits

    total = 0
    n = 1

    # loop while new term is large enough to actually change the total

    while Decimal((2 * n - 1) * x ** (2 * n - 1)) < Decimal(10 ** digits):

        # find value of new term

        term = ((-1)**(n - 1)) * 1 / Decimal((2 * n - 1) * x ** (2 * n - 1))

        # add the new term to the total

        total += term

        # next n

        n += 1

    # return the sum

    return total



# pi function

def pi(decimals):

    # start timer

    timestart = time()

    # find pi using Machin's Formula pi = 4 * (4 * arccot(5) - arccot(239))

    #  and the power formula for arccot (see arccot function above)
    print "pi = " + str(Decimal(4 * (4 * arccot(5, decimals + 3) - arccot(239, decimals + 3))).quantize(Decimal(10) ** (-decimals)))



    # display elapsed time

    timeelapsedint = round(time() - timestart, 2)

    timeelapsedstr = str(datetime.timedelta(seconds = round(timeelapsedint, 0)))

    print "runtime: " + timeelapsedstr + " or " + str(timeelapsedint) + " seconds."

pi(1000)

输出:

pi = 3.14159265358979323....more digits
runtime: 0:00:00 or 0.22 seconds.

此外,您的代码格式不正确,但是我无法对其进行编辑。我的代码段格式正确。