My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes  
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
"""
Calculate digits of pi. This module can be run interactively with

python pidigits.py

"""
__docformat__ = 'plaintext'

import sys
import math
from time import clock

from mpmath.libmp import bin_to_radix, numeral, pi_fixed

def display_fraction(digits, skip=0, colwidth=10, columns=5):
perline = colwidth * columns
printed = 0
for linecount in range((len(digits)-skip) // (colwidth * columns)):
line = digits[skip+linecount*perline:skip+(linecount+1)*perline]
for i in range(columns):
print line[i*colwidth : (i+1)*colwidth],
print ":", (linecount+1)*perline
if (linecount+1) % 10 == 0:
print
printed += colwidth*columns
rem = (len(digits)-skip) % (colwidth * columns)
if rem:
buf = digits[-rem:]
s = ""
for i in range(columns):
s += buf[:colwidth].ljust(colwidth+1, " ")
buf = buf[colwidth:]
print s + ":", printed + colwidth*columns

def calculateit(base, n, tofile):
intpart = numeral(3, base)
skip = 1
if base <= 3:
skip = 2

prec = int(n*math.log(base,2))+10

print "Step 1 of 2: calculating binary value..."
t = clock()
a = pi_fixed(prec, verbose=True, verbose_base=base)
step1_time = clock() - t

print "Step 2 of 2: converting to specified base..."
t = clock()
d = bin_to_radix(a, prec, base, n)
d = numeral(d, base, n)
step2_time = clock() - t

print "\nWriting output...\n"

if tofile:
out_ = sys.stdout
sys.stdout = tofile
print "%i base-%i digits of pi:\n" % (n, base)
print intpart, ".\n"

display_fraction(d, skip, colwidth=10, columns=5)
if tofile:
sys.stdout = out_
print "\nFinished in %f seconds (%f calc, %f convert)" % \
((step1_time + step2_time), step1_time, step2_time)

def interactive():
print "Compute digits of pi with mpmath\n"
base = input("Which base? (2-36, 10 for decimal) \n> ")
digits = input("How many digits? (enter a big number, say, 10000)\n> ")
tofile = raw_input("Output to file? (enter a filename, or just press " \
"enter\nto print directly to the screen) \n> ")
if tofile:
tofile = open(tofile, "w")

calculateit(base, digits, tofile)
raw_input("\nPress enter to close this script.")

if __name__ == "__main__":
interactive()

Change log

r1182 by fredrik.johansson on Jul 28, 2010   Diff
convert line endings in trunk to unix
format; rebuild docs
Go to: 
Project members, sign in to write a code review

Older revisions

r1138 by fredrik.johansson on Jun 6, 2010   Diff
fix output formatting of pi digits in
base 2 and 3
r1037 by fredrik.johansson on Jan 17, 2010   Diff
update demo scripts
r595 by fredrik.johansson on Oct 4, 2008   Diff
fix pidigits demo script
All revisions of this file

File info

Size: 2386 bytes, 81 lines
Powered by Google Project Hosting