2013-10-08 75 views
0

所以添加條款,我把我的知識循環的測試通過嘗試使用π與用戶定義的準確性一系列創建數學常數:對於循環不會因爲某些原因

public double pi(int accuracy) { 
    for (int i = 1; i <= accuracy; i++) { 
     rawPi += 1/(i * i); 
    } 
    return Math.sqrt(rawPi * 6); 
} 

現在,你會認爲這會越來越接近π,因爲int accuracy射擊,但它不會。它只停留在6的平方根,這意味着private double rawPi得到1,並且永遠不會更高,這意味着我的系列中沒有添加任何術語(表示爲for循環),我完全不知道問題是什麼。有任何想法嗎?

+2

整數除法。 –

+0

要擴展@ SotiriosDelimanolis的評論,該循環添加得很好。問題是,由於整數除法,第二次和以後的迭代加0。 –

回答

2

試圖改變這一點:

rawPi += 1/(i * i); 

rawPi += 1.0/(i * i); 

或通過 「帕特里夏·沙納漢」 評論說,用這個更好的準確性,避免整數溢出的I * I:

1/((double)i*i) 
+1

根據精度的不同,'1 /((double)i * i)可能會更好,以避免'i * i上的整數溢出'。 –

+0

您需要聲明rawPi爲雙重 – ChuckCottrill

+0

@ChuckCottrill SO已經提及私有雙重rawPi –

相關問題