My favorites | Sign in
Project Logo
                
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
"""
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.libmpf import bin_to_radix, numeral
from mpmath.libelefun import 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

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()
Show details Hide details

Change log

r595 by fredrik.johansson on Oct 04, 2008   Diff
fix pidigits demo script
Go to: 
Project members, sign in to write a code review

Older revisions

r508 by fredrik.johansson on Jul 02, 2008   Diff
use chudnovsky's algorithm to compute
pi
r390 by fredrik.johansson on Mar 12, 2008   Diff
edits to readme and demo scripts
r388 by fredrik.johansson on Mar 12, 2008   Diff
more documentation edits. moving demo
directory
All revisions of this file

File info

Size: 2460 bytes, 80 lines
Hosted by Google Code