2016-12-05 23:44:36 +01:00
|
|
|
|
func pi(callback) {
|
2017-09-23 10:01:46 +02:00
|
|
|
|
var (q, r, t, k, n, l) = (1, 0, 1, 1, 3, 3)
|
2016-12-05 23:44:36 +01:00
|
|
|
|
loop {
|
|
|
|
|
|
if ((4*q + r - t) < n*t) {
|
2017-09-23 10:01:46 +02:00
|
|
|
|
callback(n)
|
|
|
|
|
|
static _dot = callback('.')
|
|
|
|
|
|
var nr = 10*(r - n*t)
|
|
|
|
|
|
n = ((10*(3*q + r)) // t - 10*n)
|
|
|
|
|
|
q *= 10
|
|
|
|
|
|
r = nr
|
2016-12-05 23:44:36 +01:00
|
|
|
|
}
|
|
|
|
|
|
else {
|
2017-09-23 10:01:46 +02:00
|
|
|
|
var nr = ((2*q + r) * l)
|
|
|
|
|
|
var nn = ((q*(7*k + 2) + r*l) // (t*l))
|
|
|
|
|
|
q *= k
|
|
|
|
|
|
t *= l
|
|
|
|
|
|
l += 2
|
|
|
|
|
|
k += 1
|
|
|
|
|
|
n = nn
|
|
|
|
|
|
r = nr
|
2016-12-05 23:44:36 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-09-23 10:01:46 +02:00
|
|
|
|
|
|
|
|
|
|
STDOUT.autoflush(true)
|
|
|
|
|
|
pi(func(digit){ print digit })
|