2013-11-14 177 views
2
/** 
* @(#)precision1.java 
* 
* precision1 application 
* 
* @author 
* @version 1.00 2013/11/15 
*/ 

public class precision1 { 

    public static void main(String[] args) { 

     // TODO, add your application code 

     int x = 4; 
     double increment = 1 ; 
     double coefficient = 1; 
     double currentValue = 1; 
     double precision = 0.01; 

     for(int i = 1;increment>precision ;i++) 
     { 
      currentValue= Math.pow(x,i)*coefficient+currentValue; 
      increment= Math.abs (Math.pow(x,i)*coefficient); 
      coefficient = coefficient * (1/(i+1)); 
      System.out.println("Current result: " + currentValue); 
     } 

    } 
} 

問題是:如果給出數字2,它應該詢問用戶的整數x和精度。它應該使用下面給出的公式,通過使用用戶輸入的x來計算e的冪的近似值。只要增量小於給定的精度值,程序就會停止計算。它也應該被寫爲一種方法,而不是直接在你的主要方法中。 the formulajava算法精度計算

和輸出應該是:

current result: 5.0 
current result: 13.0 
current result: 23.666666666666664 
current result: 34.33333333333333 
current result: 42.86666666666666 
current result: 48.55555555555555 
current result: 51.8063492063492 
current result: 53.43174603174603 
current result: 54.15414462081129 
current result: 54.44310405643739 
current result: 54.54818021484688 
current result: 54.583205600983376 
current result: 54.59398264287153 
current result: 54.59706179769672 
Result is 54.59706179769672 

和我的代碼輸出爲:

Current result: 5.0 
Current result: 5.0 

不管詢問輸入部分,爲什麼我的代碼不工作的?

+0

那麼,你在你的程序中得到什麼? (即具體是什麼它不工作?) –

+0

其輸出電流 結果:5.0 目前的結果是:5.0 然後停止。 – Pumpkin

+0

你也可以把它放在問題描述中嗎?它會有助於防止評論混亂/刪除。 –

回答

2

快速通過調試器來運行它 - (1/(i+1))是整數除法,造成coefficient = coefficient * (1/(i+1)); 評估0,並因此 increment= Math.abs (Math.pow(x,i)*coefficient); 評價爲0

0

你係數是錯誤的。你應該把它設置爲1 /(1 + i)。隨着其他用戶發現您使用整數的事實。

0

你的問題是在表達1/(i+1)整數除法 - 這將評估爲0任何i >=2

我建議你換

coefficient = coefficient * (1/(i+1)); 

coefficient = coefficient/(i+1); 

甚至只是

coefficient /= i + 1; 

這都將正確評估,因爲coefficient加倍。

0

你號碼被定義爲整數,而不是增加一倍。

for (int i = 1; increment > precision; i++) { 
    currentValue = Math.pow(x, i) * coefficient + currentValue; 
    increment = Math.abs(Math.pow(x, i) * coefficient); 
    coefficient = coefficient * (1d/(i + 1d)); // here is fix 

    System.out.println("Current result: " + currentValue); 
}