40 lines
1002 B
Plaintext
40 lines
1002 B
Plaintext
import "./big" for BigInt
|
|
import "io" for Stdout
|
|
|
|
var calcPi = Fn.new {
|
|
var nn = BigInt.zero
|
|
var nr = BigInt.zero
|
|
var q = BigInt.one
|
|
var r = BigInt.zero
|
|
var t = BigInt.one
|
|
var k = BigInt.one
|
|
var n = BigInt.three
|
|
var l = BigInt.three
|
|
var first = true
|
|
while (true) {
|
|
if (q * BigInt.four + r - t < n * t) {
|
|
System.write(n)
|
|
if (first) {
|
|
System.write(".")
|
|
first = false
|
|
}
|
|
Stdout.flush()
|
|
nr = (r - n * t) * BigInt.ten
|
|
n = (q * BigInt.three + r) * BigInt.ten / t - n * BigInt.ten
|
|
q = q * BigInt.ten
|
|
r = nr
|
|
} else {
|
|
nr = (q * BigInt.two + r) * l
|
|
nn = (q * BigInt.new(7) * k + BigInt.two + r * l) / (t * l)
|
|
q = q * k
|
|
t = t * l
|
|
l = l + BigInt.two
|
|
k = k + BigInt.one
|
|
n = nn.copy()
|
|
r = nr
|
|
}
|
|
}
|
|
}
|
|
|
|
calcPi.call()
|