1000 digits of pi in Python

前端 未结 11 1357
忘了有多久
忘了有多久 2020-11-28 10:54

I have been thinking about this issue and I can\'t figure it out. Perhaps you can assist me. The problem is my code isn\'t working to output 1000 digits of pi in the Python

相关标签:
11条回答
  • 2020-11-28 11:05

    If you don't want to implement your own algorithm, you can use mpmath.

    try:
        # import version included with old SymPy
        from sympy.mpmath import mp
    except ImportError:
        # import newer version
        from mpmath import mp
    
    mp.dps = 1000  # set number of digits
    print(mp.pi)   # print pi to a thousand places
    

    Reference

    Update: Code supports older and newer installations of SymPy (see comment).*

    0 讨论(0)
  • 2020-11-28 11:05

    wallis formula can get to 3.141592661439964 but a more efficient way is needed to solve this problem.

    https://www.youtube.com/watch?v=EZSiQv_G9HM

    and now my code

    x, y, summing = 2, 3, 4
    
    for count in range (0,100000000):
        summing *= (x/y)
        x += 2
        summing *= (x/y)
        y += 2
    
    print (summing)
    
    0 讨论(0)
  • 2020-11-28 11:07

    I was solved with bellow formula 5-6 years ago.

    Machin-like formula

    Wikipedia: https://en.wikipedia.org/wiki/Machin-like_formula

    Sorry for the code quality. Variable names can be meaningless.

    #-*- coding: utf-8 -*-
    
    # Author:    Fatih Mert Doğancan
    # Date:      02.12.2014
    
    def arccot(x, u):
        sum = ussu = u // x
        n = 3
        sign = -1
        while 1:
            ussu = ussu // (x*x)
            term = ussu // n
            if not term:
                break
            sum += sign * term
            sign = -sign
            n += 2
        return sum
    
    def pi(basamak):
        u = 10**(basamak+10)
        pi = 4 * (4*arccot(5,u) - arccot(239,u))
        return pi // 10**10
    
    if __name__ == "__main__":
        print pi(1000) # 1000 
    
    0 讨论(0)
  • 2020-11-28 11:11

    Does this do what you want?

    i = 0;
    pi_str = ""
    for x in make_pi():
        pi_str += str(x)
        i += 1
        if i == 1001:
            break
    
    print "pi= %s.%s" % (pi_str[0],pi_str[1:])
    
    0 讨论(0)
  • 2020-11-28 11:12

    Here is a different way I found here --> Python pi calculation? to approximate python based on the Chudnovsky brothers formula for generating Pi which I have sightly modified for my program.

    def pifunction():
        numberofdigits = int(input("please enter the number of digits of pi that you want to generate"))
        getcontext().prec = numberofdigits
    
    def calc(n):
        t = Decimal(0)
        pi = Decimal(0)
        deno = Decimal(0)
        k = 0
        for k in range(n):
            t = (Decimal(-1)**k)*(math.factorial(Decimal(6)*k))*(13591409+545140134*k)
            deno = math.factorial(3*k)*(math.factorial(k)**Decimal(3))*(640320**(3*k))
            pi += Decimal(t)/Decimal(deno)
        pi = pi * Decimal(12)/Decimal(640320**Decimal(1.5))
        pi = 1/pi
        return str(pi)
    print(calc(1))
    

    I hope this helps as you can generate any number of digits of pi that you wish to generate.

    0 讨论(0)
  • 2020-11-28 11:13

    From Fabrice Bellard site: Pi Computation algorithm. Sorry for such a straightforward implementation. 1000 is fast enough (0.1s for me), but 10000 isn't such fast - 71s :-(

    import time
    from decimal import Decimal, getcontext
    
    def compute(n):
        getcontext().prec = n
        res = Decimal(0)
        for i in range(n):
            a = Decimal(1)/(16**i)
            b = Decimal(4)/(8*i+1)
            c = Decimal(2)/(8*i+4)
            d = Decimal(1)/(8*i+5)
            e = Decimal(1)/(8*i+6)
            r = a*(b-c-d-e)
            res += r
        return res
    
    if __name__ == "__main__":
        t1 = time.time()
        res = compute(1000)
        dt = time.time()-t1
        print(res)
        print(dt)
    
    0 讨论(0)
提交回复
热议问题