27 lines
615 B
Plaintext
27 lines
615 B
Plaintext
func pi(callback) {
|
|
var (q, r, t, k, n, l) = (1, 0, 1, 1, 3, 3);
|
|
loop {
|
|
if ((4*q + r - t) < n*t) {
|
|
callback(n);
|
|
static _dot = callback('.');
|
|
var nr = 10*(r-n*t);
|
|
n = (int((10*(3*q + r)) / t) - 10*n);
|
|
q *= 10;
|
|
r = nr;
|
|
}
|
|
else {
|
|
var nr = ((2*q + r) * l);
|
|
var nn = int((q*(7*k + 2) + r*l) / (t*l));
|
|
q *= k;
|
|
t *= l;
|
|
l += 2;
|
|
k += 1;
|
|
n = nn;
|
|
r = nr;
|
|
}
|
|
}
|
|
}
|
|
|
|
STDOUT.autoflush(1);
|
|
pi(func(digit){ print digit });
|