2014-06-28 51 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本身_。:) –