8

テスト (x == 0) が true を返す x の値はどれですか? x = 0 の値の場合にのみ、ある種のマージンがありますか、それともテストは true を返しますか?

4

3 に答える 3

11

Math.signum(x)== 0 の場合。

float x== 0 かどうかをチェックする他のすべての試みは失敗する可能性があります。

しかし、Math.signum() は非常に基本的なものであり、失敗することはありません。

于 2015-04-11T21:10:42.803 に答える
9

この値を見つけるための簡単なメソッドを作成できます。

public class FloatEqualsZero {
    public static void main(String [] args) {
        float x = 1;
        while(x != 0 && -x != 0) {
            x *= 0.1;
            System.out.println(x);
        }
    }
}

これにより、次が出力されます。

0.1
0.01
9.999999E-4
9.999999E-5
9.999999E-6
9.999999E-7
...
1.0E-37
1.0E-38
1.0E-39
1.0E-40
1.0E-41
1.0E-42
1.0E-43
9.8E-45
1.4E-45
0.0

これ (および同様のテスト) は、x が 0.0f または -0.0f の場合にのみ (x == 0) が真であることを示しています。

于 2013-10-16T07:42:47.303 に答える