]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add test for mpz module
authorGuido van Rossum <guido@python.org>
Fri, 19 Aug 1994 15:09:02 +0000 (15:09 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 19 Aug 1994 15:09:02 +0000 (15:09 +0000)
Demo/scripts/README
Demo/scripts/mpzpi.py [new file with mode: 0755]

index 86f7cb5415246c121103baf3c90a45e11752829e..634160b93bd9f8a6c2ec230ba2112fd470dc62e8 100644 (file)
@@ -31,6 +31,7 @@ lpwatch.py            Watch BSD line printer queues
 markov.py              Markov chain simulation of words or characters
 methfix.py             Fix old method syntax def f(self, (a1, ..., aN)):
 mkreal.py              Turn a symbolic link into a real file or directory
+mpzpi.py               test mpz -- print digits of pi (compare pi.py)
 objgraph.py            Print object graph from nm output on a library
 pathfix.py             Change #!/usr/local/bin/python into something else
 pdeps.py               Print dependencies between Python modules
diff --git a/Demo/scripts/mpzpi.py b/Demo/scripts/mpzpi.py
new file mode 100755 (executable)
index 0000000..776c095
--- /dev/null
@@ -0,0 +1,34 @@
+#! /usr/local/bin/python
+# Print digits of pi forever.
+#
+# The algorithm, using Python's 'long' integers ("bignums"), works
+# with continued fractions, and was conceived by Lambert Meertens.
+#
+# See also the ABC Programmer's Handbook, by Geurts, Meertens & Pemberton,
+# published by Prentice-Hall (UK) Ltd., 1990.
+
+import sys
+from mpz import mpz
+
+def main():
+       mpzone, mpztwo, mpzten = mpz(1), mpz(2), mpz(10)
+       k, a, b, a1, b1 = mpz(2), mpz(4), mpz(1), mpz(12), mpz(4)
+       while 1:
+               # Next approximation
+               p, q, k = k*k, mpztwo*k+mpzone, k+mpzone
+               a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
+               # Print common digits
+               d, d1 = a/b, a1/b1
+               while d == d1:
+                       output(d)
+                       a, a1 = mpzten*(a%b), mpzten*(a1%b1)
+                       d, d1 = a/b, a1/b1
+
+def output(d):
+       # Use write() to avoid spaces between the digits
+       # Use int(d) to avoid a trailing L after each digit
+       sys.stdout.write(`int(d)`)
+       # Flush so the output is seen immediately
+       sys.stdout.flush()
+
+main()