0

このコードを実行すると、「良い」という単語が表示されないのはなぜですか? Array1 と Array2 の位置 0 に格納されている値は、どちらも 1 です。

public class ArrayStuff {

    public static void main(String[] args) {

        double value = 1;

        Double[] Array1 = new Double[10];
        Array1 = new Double[] {1.0};

        Double[] Array2 = new Double[10];

        Array2[0] = value;

        int i = 0;

        System.out.println(Array1[0]);
        System.out.println(Array2[i]);

        if (Array1[0] == Array2[i])
        {

            System.out.println("good");

        }
     }

}
4

4 に答える 4

3

あなたは、コンピューターが浮動小数点数を正確な精度で表現できないことを学んでいます。解決策は、「十分に近い」浮動小数点の解決策を見つけるコードを使用するか、10 進数を使用するコードを使用することです。

于 2013-10-13T01:58:51.317 に答える
1

有限精度の数値には、特に正確に等しいかどうかを比較するという点で限界があるためです。

値の差が特定のしきい値よりも小さいかどうかを確認して、問題にアプローチする必要があります。

public final double EPSILON = 0.001;

if (Math.abs(Array1[0] - Array2[i]) < EPSILON)
 ...
于 2013-10-13T02:01:17.737 に答える