0

我在以下代码中遇到了双精度数及其总和的准确性问题:

public static void main(String[] args) {

    for(double A = 1; A <= 100; A++)
    {
        for(double B = 1; B <= 100; B++)
        {
            for(double C = 1; C <= 100; C++)
            {
                for(double x = 3; x <= 100; x++)
                {
                    for(double y = 3; y <= 100; y++)
                    {
                        for(double z = 3; z <= 100; z++)
                        {
                            if((Math.pow(A, x) + Math.pow(B, y)) == (Math.pow(C, z)))
                            {
                                System.out.println(A+"^"+x+" + "+B+"^"+y+" = "+C+"^"+z);
                            }
                        }
                    }
                }
            }
        }
    }

}

其中输出的前五项是:

1.0^3.0 + 2.0^53.0 = 2.0^53.0
1.0^3.0 + 2.0^54.0 = 2.0^54.0
1.0^3.0 + 2.0^55.0 = 2.0^55.0
1.0^3.0 + 2.0^56.0 = 2.0^56.0
1.0^3.0 + 2.0^57.0 = 2.0^57.0

很明显,将“1.0^3.0”(基本上是“1.0”)与“2.0^53.0”相加等于“2.0^53.0”;y 值也有问题。

可能是我的条件语句有缺陷,或者我可能不得不使用不同的原始数据类型......谢谢。

4

1 回答 1

2

因为双精度正好有53 位尾数

于 2013-06-07T00:04:44.867 回答