UNPKG

1.51 kBHTMLView Raw
1<html>
2<head>
3 <title>Pi Bailey-Borwein-Plouffe</title>
4 <script src="../node_modules/decimal.js/decimal.js"></script>
5</head>
6<body>
7<script>
8 Decimal.config({precision: 100});
9
10 function pi() {
11 // the Bailey-Borwein-Plouffe formula
12 // http://stackoverflow.com/questions/4484489/using-basic-arithmetics-for-calculating-pi-with-arbitary-precision
13
14 var zero = new Decimal(0);
15 var one = new Decimal(1);
16 var two = new Decimal(2);
17 var four = new Decimal(4);
18
19 var p16 = one;
20 var pi = zero;
21 var precision = Decimal.config().precision;
22 var k8 = zero;
23
24 for (var k = zero; k.lte(precision); k = k.plus(one)) {
25 // pi += 1/p16 * (4/(8*k + 1) - 2/(8*k + 4) - 1/(8*k + 5) - 1/(8*k+6));
26 // p16 *= 16;
27 //
28 // a little simpler:
29 // pi += p16 * (4/(8*k + 1) - 2/(8*k + 4) - 1/(8*k + 5) - 1/(8*k+6));
30 // p16 /= 16;
31
32 var f = four.div(k8.plus(1))
33 .minus(two.div(k8.plus(4)))
34 .minus(one.div(k8.plus(5)))
35 .minus(one.div(k8.plus(6)));
36
37 pi = pi.plus(p16.times(f));
38 p16 = p16.div(16);
39 k8 = k8.plus(8);
40 }
41
42 return pi;
43 }
44
45 console.time('estimation');
46 var calculatedPi = pi();
47 console.timeEnd('estimation');
48
49 document.write('<code>Real: 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664...</code><br>');
50 document.write('<code>Est:&nbsp;&nbsp;' + calculatedPi.toString() + '</code>');
51
52</script>
53</body>
54</html>
\No newline at end of file