2014-06-28 55 views
4

我一直在寻找几小时试图找到一个算法来获得JavaScript的第n位数字。Pi的第n个数字

我知道我可以用2*Math.acos(0)Math.PI来获得PI,但我需要找到第n位数字。

如何获得没有硬编码的PI的第n位数字?

+1

一个简单的方法是尝试泰勒级数并尽可能多地逼近它。你的数学有多好? –

+0

可能的重复[PI如何计算?](http://stackoverflow.com/questions/2654749/how-is-pi-calculated) – jcaron

+0

另请参阅:http://www.bellard.org/pi/ –

回答

6

这是一个相当简单的方法,假设一些第一年的微积分。

您可以通过反复推导并理解它们的斜率来近似函数 - 然后在它们周围建立一个多项式,以使多项式足够好地逼近它们的行为。如果你一直这样做,只要你能得到一些叫做泰勒序列的东西。如果一个函数足够“良好地表达”,比如正弦函数,那么可以相当容易地估计它。

这里是正弦函数的扩展,维基百科(CC维基百科)采取

enter image description here

您可以通过求导sin(x) n次,接近它想出了这一点。阅读更多on the subject here

一个有用的分析,并拿出反正切函数Math.atan

enter image description here

因为把x = 1我们知道Math.atan(1) = Pi/4这是非常有用的。

所以,让我们写我们getPi

function getPi(){ 
    var sum = 0; 
    for(var n = 0; n < 100000000; n++){ 
     var mult = (n%2 === 0) ? 1 : -1; // -1^n 
     sum += mult * (1/(2*n+1)); 
    } 
    return sum * 4; // to get pi 
} 
getPi(); // 3.141592643589326 

执行的迭代更多,更好的精确度,你会得到。计算Pi有更快的方法,这只是一个例子,需要一些 - 但不是一个巨大的数学。如前所述 - 它通过用多项式逼近atan函数来工作。

注意:由于JavaScript双精度数有界,因此我们遇到更大的问题。我们忽略了这个答案。

+0

我意识到这里有很多手挥手 - 如果您有任何关于如何近似多项式函数的方法或关于此方法的具体问题 - 请随时询问,我会尽我所能最好回答。既然你没有说你的数学水平是什么 - 我假设了一些东西。让我知道。 –

+0

如果你愿意,你可以用[this]更好的运气(http://en.wikipedia.org/wiki/Bailey%E2%80%93Borwein%E2%80%93Plouffe_formula)。它更加呃,实用。 –

+7

问题是关于如何获得_nth digit_ ** not ** _PI本身_。:) –