Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Chudnovsky algorithm for Pi
- # https://en.wikipedia.org/wiki/Chudnovsky_algorithm
- # Muutettu rivi 10 alkuperäisestä itse ymmärrettyyn muotoon (12*k+2)...
- # lisätty aika
- # Juhani Kaukoranta 23.7.2019 wikipedian avulla
- from decimal import Decimal as Dec, getcontext as gc
- import time
- def PI(maxK, prec, disp):
- gc().prec = prec
- M, L, X, S = 1, 13591409, 1, 13591409
- for k in range(0, maxK+1):
- M = (12*k+2)*(12*k+6)*(12*k+10) * M // (k+1)**3
- L += 545140134
- X *= -262537412640768000
- S += Dec(M * L) / X
- pi = 426880 * Dec(10005).sqrt() / S
- pi = Dec(str(pi)[:disp]) # drop few digits of precision for accuracy
- print("PI(maxK={} iterations, gc().prec={}, disp={} digits) =\n{}".format(maxK, prec, disp, pi))
- return pi
- digits = int(input("How many digits in Pi "))
- maxK = int(digits*70/1006)+1
- prec =digits+8
- disp = digits+1
- # defaults maxK=70,prec=1008,disp=1006 chosen to gain 1000+ digits within a few seconds
- time0 = time.perf_counter()
- Pi = PI(maxK,prec,digits)
- time1 = time.perf_counter()
- print("Aikaa kului laskentaan ja tulostukseen ",time1-time0," sekuntia")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement