| 1 | import math.big |
| 2 | |
| 3 | // pi_digits calculates the digits of Pi, based on https://mail.python.org/pipermail/edu-sig/2012-December/010721.html |
| 4 | fn pi_digits(count int) { |
| 5 | mut n := count |
| 6 | mut k, mut a, mut b, mut a1, mut b1 := big.c2, big.c4, big.c1, big.c12, big.c4 |
| 7 | mut p, mut q := k, k |
| 8 | for n > 0 { |
| 9 | p, q, k = k * k, (big.c2 * k) + big.c1, k + big.c1 |
| 10 | a, b, a1, b1 = a1, b1, p * a + q * a1, p * b + q * b1 |
| 11 | mut d := a / b |
| 12 | mut d1 := a1 / b1 |
| 13 | for d == d1 { |
| 14 | print(d.int()) |
| 15 | n-- |
| 16 | a, a1 = big.c10 * (a % b), big.c10 * (a1 % b1) |
| 17 | d, d1 = a / b, a1 / b1 |
| 18 | if n <= 0 { |
| 19 | break |
| 20 | } |
| 21 | } |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | pi_digits(arguments()[1] or { '100' }.int()) |
| 26 | println('') |
| 27 | |