2012-04-24 48 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

相关问题