Obliczanie liczby PI
0 Comments
W cyklu przykłady rozwiązań, zamieszczamy algorytm w języku javascript do obliczania krokowo rozwinięcia dziesiętnego liczby PI.
function bi(n, b) {
return new jsbn.BigInteger(n.toString(), b ? b : 10);
};
var one = bi(1),
two = bi(2),
three = bi(3),
four = bi(4),
seven = bi(7),
ten = bi(10);
function calcPi() {
var q = bi(1),
r = bi(0),
t = bi(1),
k = bi(1),
n = bi(3),
l = bi(3);
var digit = 0,
firstrun = 1;
var p = document.getElementById('pi');
function output(s) {
p.appendChild(document.createTextNode(s));
}
function continueCalcPi(q, r, t, k, n, l) {
while (true) {
if (q.multiply(four).add(r).subtract(t).compareTo(n.multiply(t)) < 0) {
output(n.toString());
if (digit == 0 && firstrun == 1) {
output('.');
firstrun = 0;
};
digit = (digit + 1) % 256;
var nr = (r.subtract(n.multiply(t))).multiply(ten);
n = (q.multiply(three).add(r)).multiply(ten).divide(t).subtract(n.multiply(ten));
q = q.multiply(ten);
r = nr;
if (digit % 8 == 0) {
output(' ');
return setTimeout(function() {
continueCalcPi(q, r, t, k, n, l);
}, 1);
};
} else {
var nr = q.shiftLeft(1).add(r).multiply(l);
var nn = q.multiply(k).multiply(seven).add(two).add(r.multiply(l)).divide(t.multiply(l));
q = q.multiply(k);
t = t.multiply(l);
l = l.add(two);
k = k.add(one);
n = nn;
r = nr;
}
}
}
continueCalcPi(q, r, t, k, n, l);
}
calcPi();
Tutaj można zobaczyć przykładową implementację tego algorytmu.