0

浮動小数点数を等号と比較するのは悪い考えであることはわかっています。私の質問は、同じ計算から得られた数値を比較しても安全かどうかです。例 (Java コード)

double doSomething(double d) {
    return d;
}

void test() {
    double result = computation();
    double result2 = result;
    Double result3 = new Double(result)
    Double result4 = new Double(result2)
    double result5 = doSomething(result2)
    //etc.
    //now do all of the above compare equal? i.e.
    boolean b = result4.doubleValue() == result //is this true?
    //and for other combinations?
}

それらは等しいはずですが、FPUレジスタのために本当に正しいかどうかはわかりません。JVMはそれらが等しいことを保証しますか? おまけの質問: C はどうですか?

これが以前に回答されていた場合は申し訳ありませんが、回答を見つけることができませんでした。

4

1 に答える 1

2

Java と C の両方で、代入は、割り当てられた値を追加の精度や範囲なしで目的の型に変換する必要があります。さらに単純な代入では、値を変更できません。

Java では、これは 5.1.13 (値セット変換) および 5.2 (代入変換) で指定されています。

C 2011 (N1570)では、これは 5.2.4.2.2 9 に記載されています。

于 2013-11-09T21:53:31.503 に答える