Welcome, guest | Sign In | My Account | Store | Cart

Computes Pi to many decimal places and prints the digits in a circle.

Python, 26 lines
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def pi(places=10):
    "Computes pi to given number of decimal places"
    # 3 + 3*(1/24) + 3*(1/24)*(9/80) + 3*(1/24)*(9/80)*(25/168)
    # The numerators 1, 9, 25, ... are given by  (2x + 1) ^ 2
    # The denominators 24, 80, 168 are given by (16x^2 -24x + 8)
    extra = 8
    one = 10 ** (places+extra)
    t, c, n, na, d, da = 3*one, 3*one, 1, 0, 0, 24
    while t > 1:
        n, na, d, da  = n+na, na+8, d+da, da+32
        t = t * n // d
        c += t
    return c // (10 ** extra)

def picirc(radius, aspect_ratio=5):
    "Display the digit of pi in a circle of given radius"
    display_width = int(radius * aspect_ratio + 10)
    pi_str = repr(pi(int(2 * radius ** 2 * aspect_ratio)))
    pos = 0
    for i in range(2 * radius):
        cols = int(0.5 + aspect_ratio * (radius**2 - (radius-(i+0.5))**2) ** 0.5)
        print(pi_str[pos:pos+cols].center(display_width))
        pos += cols

if __name__ == '__main__':
    picirc(16)

The is a just-for-fun script that shows-off Python's long integers and simple string formatting.

Adjust the aspect ratio until the output looks nicely rounded. The ratio will vary depending on your choice of font.

                               31415926535897932384                                   
                        6264338327950288419716939937510582                            
                   0974944592307816406286208998628034825342117                        
                06798214808651328230664709384460955058223172535940                    
             81284811174502841027019385211055596446229489549303819644                 
           288109756659334461284756482337867831652712019091456485669234               
         6034861045432664821339360726024914127372458700660631558817488152             
       09209628292540917153643678925903600113305305488204665213841469519415           
     11609433057270365759591953092186117381932611793105118548074462379962749          
    5673518857527248912279381830119491298336733624406566430860213949463952247         
   371907021798609437027705392171762931767523846748184676694051320005681271452        
  63560827785771342757789609173637178721468440901224953430146549585371050792279       
  689258923542019956112129021960864034418159813629774771309960518707211349999998      
 3729780499510597317328160963185950244594553469083026425223082533446850352619311      
 88171010003137838752886587533208381420617177669147303598253490428755468731159562     
 86388235378759375195778185778053217122680661300192787661119590921642019893809525     
 72010654858632788659361533818279682303019520353018529689957736225994138912497217     
 75283479131515574857242454150695950829533116861727855889075098381754637464939319     
 2550604009277016711390098488240128583616035637076601047101819429555961989467678      
  374494482553797747268471040475346462080466842590694912933136770289891521047521      
  62056966024058038150193511253382430035587640247496473263914199272604269922796       
   782354781636009341721641219924586315030286182974555706749838505494588586926        
    9956909272107975093029553211653449872027559602364806654991198818347977535         
     66369807426542527862551818417574672890977772793800081647060016145249192          
       17321721477235014144197356854816136115735255213347574184946843852332           
         3907394143334547762416862518983569485562099219222184272550254256             
           887671790494601653466804988627232791786085784383827967976681               
             45410095388378636095068006422512520511739298489608412848                 
                86269456042419652850222106611863067442786220391949                    
                   4504712371378696095636437191728746776465757                        
                        3962413890865832645995813390478027                            
                               59009946576407895126

1 comment

Andrew Wayne Teesdale Jr. 10 years, 8 months ago  # | flag

cool i luv it :-)

Created by Raymond Hettinger on Sat, 12 May 2012 (MIT)
Python recipes (4591)
Raymond Hettinger's recipes (97)

Required Modules

  • (none specified)

Other Information and Tasks