9

Float.MIN_VALUE は何に等しいと思いますか?

次のコードは、バグを解決しようとして、過去 5 時間がどこに行ったかを説明しています。

public static void main(String[] args) {
    compareToZero(Float.MIN_VALUE); // Out = true false false
    compareToZero(Float.MAX_VALUE); // Out = true false false

    System.out.println("Float minimum " + Float.MIN_VALUE); // Out = 1.4E-45
    System.out.println("Float maximum " + Float.MAX_VALUE); // Out = 3.4028235E38
}

private static void compareToZero(float value1) {
    System.out.print((value1 > 0) + " ");
    System.out.print((value1 < 0) + " ");
    System.out.print((value1 == 0) + "\n");
}

float の最小値が正の値になるとは想像もしていませんでした... 用途が見つかりません。

4

1 に答える 1

20

Float.MIN_VALUEのドキュメントによると:

float 型のゼロ以外の正の最小値を保持する定数 (2 ~ 149)。これは、16 進浮動小数点リテラル 0x0.000002P-126f と等しく、Float.intBitsToFloat(0x1) とも等しくなります。

a の「真の最小値」が is であるため、名前は議論の余地がありますfloatが、他の数値型との一貫性のために選択されたのではない-Float.MAX_VALUEかと思います。MIN_VALUE名前MIN_RANGE_VALUEMAX_RANGE_VALUE(または類似の) を使用すると、違いがより明確になる可能性があります。

これが「最小値」である理由を理解するには、Java (またはIEEE-754 ) 浮動小数点値がどのように機能するかについて少し理解する必要があります。この洞察により、ドキュメントを読んだ後、が float の仮数部と指数部によって表現可能なゼロ以外の最小値Float.MIN_VALUEであることが明らかです。または、float が表すことができる最小の正の値。

「真の最小値」は、float の仮数部と指数部が表現できる最大値を表す-Float.MAX_VALUEためです。floatFloat.MAX_VALUE符号は個別のビットとして格納されるため、この範囲制限は正の数値と負の数値の両方で同じです。

これは、整数が Java (およびほとんどの CPU) で機能する方法とは異なります。整数は2 の補数を使用してエンコードされます。(一部のコンピューター システムでは、「1 の補数」と呼ばれる離散符号ビットが使用され、0 と -0 の 2 つの整数値が含まれます。)

ハッピーリサーチ!

于 2012-07-10T19:07:39.680 に答える