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