为什么我得到无限?它能解决吗?

时间:2012-04-24 12:31:10

标签: java infinity

我有这样的代码,我试图从henon公式得到数字

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,25中获得无限值...如何解决?

2 个答案:

答案 0 :(得分:0)

您获得“无限”值,因为您的计算超出了double数据类型的范围。

如果您需要更多范围,则必须采用类似bignum库的内容,例如BigDecimal

答案 1 :(得分: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()方法。