RosettaCodeData/Task/Pi/Wren/pi.wren

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()