Is this an efficient way to compute the value of Pi, where the limit of j
\$\propto\$ accuracy?
PI = 0;
for (var j = 1; j < 100; j+=2) PI += (4/j)*((j+1)%4?1:-1);
The formula I used to write this is:
$$\pi \equiv \frac{4}{1}-\frac{4}{3}+\frac{4}{5}-\frac{4}{7}+\cdots$$
-
\$\begingroup\$ Could you please add a description of the mathematics behind your algorithm? That should help us to understand the merits of your approach, over, say something from here \$\endgroup\$Tamoghna Chowdhury– Tamoghna Chowdhury2016年12月27日 08:34:24 +00:00Commented Dec 27, 2016 at 8:34
-
\$\begingroup\$ I've edited the question, adding the formula used. \$\endgroup\$Tobi– Tobi2016年12月27日 18:51:08 +00:00Commented Dec 27, 2016 at 18:51
1 Answer 1
Your code will work eventually, but this series converges very very slowly. In fact, as you can read on Wolfram's web site:
... this sum converges so slowly that 300 terms are not sufficient to calculate pi correctly to two decimal places!
Here's a better way to do it which implements this function:
$$ \pi = \sum_{k=0}^\infty \frac{4(-1)^k}{2k+1} \bigg(\frac{1}{2^{2k+1}} + \frac{1}{3^{2k+1}}\bigg)$$
(function(){
PI=0;
n=-4;
for(k=0;k<100;k++) {
z = 2*k+1;
n *= -1;
PI += n/z*(Math.pow(2, -z) + Math.pow(3, -z));
}
console.log(PI);
})();
-
\$\begingroup\$ I know this is code-review, but is that equation the fastest converging one, or are the limitless / ever-accurate equations. \$\endgroup\$Tobi– Tobi2016年12月27日 21:47:48 +00:00Commented Dec 27, 2016 at 21:47
-
\$\begingroup\$ There are equations that converge faster, but I chose this one that was close in computational complexity to the one you originally used. See Approximations of Pi on Wikipedia. \$\endgroup\$Edward– Edward2016年12月27日 22:43:51 +00:00Commented Dec 27, 2016 at 22:43