v / examples / pidigits.v
26 lines · 24 sloc · 653 bytes · aca3797f2371868e354abb68edc641e6210df9ce
Raw
1import math.big
2
3// pi_digits calculates the digits of Pi, based on https://mail.python.org/pipermail/edu-sig/2012-December/010721.html
4fn 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
25pi_digits(arguments()[1] or { '100' }.int())
26println('')
27