2012-04-24 51 views
-1

我有這樣的代碼,我嘗試從儂式爲什麼我無窮大?它能解決嗎?

public class henon 
{ 
    public static void main(String[] args) 
    {   
     double a = 0.3; 
     double b = 1.4;  
     double k[] = new double[1026]; 
     k[0] = 0.01; 
     k[1] = 0.02;    

     for(int i = 0; i < 1024; i++) 
     {      
      k[i+2] = 1 - (a * Math.pow(k[i+1], 2) + b * k[i]);   
      System.out.println("nilai ke" + i +" adalah " + k[i]); 
     } 
    }    
} 

我怎麼可以得到24無限valuew拿到號,25 ...如何解決呢?

+8

請深呼吸並更清楚地解釋您的問題。 – 2012-04-24 12:34:39

+0

你究竟想達到什麼目的?你的k []有'0.01,0.02,0.98588 ....'..? – Nikhar 2012-04-24 12:42:58

+0

我嘗試從henon公式 – user1209555 2012-04-24 12:58:58

回答

0

BigDecimal更適合您的要求。

double和float對於準確結果沒有用處,因爲Joshua bloch在Effective Java中說過。

BigDecimal k[] = new BigDecimal[1026]; 
     k[0] = new BigDecimal(0.01); 
     k[1] = new BigDecimal(0.02); 
     for (int i = 2; i < k.length; i++) { 
      k[i]=new BigDecimal(0.0); 
     } 

如果你想Bigdecimal的雙值,你可以使用doubleValue()方法。

+0

bigdecimal對我來說是新的...我嘗試用bigdecimal改變double,但是我在這個double a = 0.3中得到錯誤; double b = 1.4; – user1209555 2012-04-24 12:57:26

+0

你可以解釋一個很好的例子,我沒有得到它,你可以看到我編輯的答案 – 2012-04-24 13:01:42

+0

即時通訊已經成功做到這一點,但1大問題不能用於math.pow在我的代碼有pow過程你能幫我先生嗎? – user1209555 2012-04-24 14:31:06

0

由於您的計算超出了double數據類型的範圍,因此您將獲得「無限」值。

如果你需要更多的範圍,你將不得不求助於像bignum庫,如BigDecimal

+0

...或BigDecimal獲取數字? – 2012-04-24 12:39:20

+0

@Marko,你當然是對的,我錯誤地認爲這是C因此我參考了MPIR。由於它與Java更相關,因此更改爲BigDecimal。 – paxdiablo 2012-04-24 12:42:44

+0

您的建議並非全部錯誤,因爲人們的確渴望C庫的速度。 BigDecimal在這個類別中是廢話,但是從一開始就容易得多。 – 2012-04-24 12:45:22

相關問題