Infinity
実数のオーバーフローはInfinity
実数演算で最大値を超えるような演算をすると、結果がInfinityになる。最小値を下回る演算の場合は-Infinity。Infinityのリテラルはない。
|
1 2 3 4 5 6 |
double dMaxP = Double.MAX_VALUE; System.out.println(dMaxP * 2); // Infinity double dMaxN = -Double.MAX_VALUE; System.out.println(dMaxN * 2); // -Infinity System.out.prinln(Infinity); // コンパイルエラー:Infinityを変数に解決できません |
Infinityに対する数値の演算結果は直感的
Infinityに対して数値を加減乗除しても結果はInfinity。で、数学の∞と同じ。
|
1 2 3 4 |
System.out.println(infinity + 2); // Infinity System.out.println(infinity - 2); // Infinity System.out.println(infinity * 2); // Infinity System.out.println(infinity / 2); // Infinity |
数値からInfinityを減じると-Infinity、Infinityで割ると0.0。lim[x→∞]と考えると直感的。
|
1 2 |
System.out.println(2 - infinity); // -Infinity System.out.println(2 / infinity); // 0.0 |
Infinity同士の演算
Infinity同士の加算・乗算はInfinity。Infinity同士の減算・除算はNaN。
|
1 2 3 4 |
System.out.println(infinity + infinity); // Infinity System.out.println(infinity - infinity); // NaN System.out.println(infinity * infinity); // Infinity System.out.println(infinity / infinity); // NaN |
Infinityと最大値
Infinityは実数の最大値より大きく、これと等しくはない。
|
1 2 3 4 |
System.out.println(infinity > Double.MAX_VALUE); // true System.out.println(infinity < Double.MAX_VALUE); // false System.out.println(infinity == Double.MAX_VALUE); // false System.out.println(infinity != Double.MAX_VALUE); // true |
Infinity同士の大小比較
InfinityはInfinityと等しい。
|
1 2 3 4 |
System.out.println(infinity == infinity); System.out.println(infinity != infinity); System.out.println(infinity > infinity); System.out.println(infinity < infinity); |
Infinityの定数定義
Infinityはdouble型とfloat型で定義されていて、それらの定数定義も準備されている。
|
1 2 3 4 5 6 7 8 9 |
double pDblInfinity = Double.POSITIVE_INFINITY; double nDblInfinity = Double.NEGATIVE_INFINITY; System.out.println(pDblInfinity); // Infinity System.out.println(nDblInfinity); // -Infinity float pFltInfinity = Float.POSITIVE_INFINITY; float nFltInfinity = Float.NEGATIVE_INFINITY; System.out.println(pFltInfinity); // Infinity System.out.println(nFltInfinity); // -Infinity |
double型とfloat型で、Infinityと-Infinityはそれぞれ等しい。
|
1 2 |
System.out.println(pDblInfinity == pFltInfinity); System.out.println(nDblInfinity == nFltInfinity); |
NaN
計算結果が不定→NaN
実数演算でゼロ同士やInfinity同士の除算結果はNaN (Not a Number)になる。NaNのリテラルはない。
|
1 2 3 4 |
System.out.println(0.0 / 0); // NaN System.out.println(infinity / infinity); // NaN System.out.println(NaN); // コンパイルエラー:NaNを変数に解決できません |
NaNを含む演算はNaN
NaNを含む四則演算の結果は全てNaN。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
double nan = 0.0 / 0; System.out.println(nan + 1); // NaN System.out.println(nan - 1); // NaN System.out.println(nan * 1); // NaN System.out.println(nan / 1); // NaN System.out.println(1 - nan); // NaN System.out.println(1 / nan); // NaN System.out.println(nan + nan); // NaN System.out.println(nan - nan); // NaN System.out.println(nan * nan); // NaN System.out.println(nan / nan); // NaN |
NaN != NaN
NaN同士は互いに等しくない。大小関係は特定できない(>でも<でもない)。
|
1 2 3 4 |
System.out.println(nan == nan); // false System.out.println(nan != nan); // true System.out.println(nan > nan); // false System.out.println(nan < nan); // false |
NaNの定数定義
NaNはdouble型とfloat型で定義されていて、それらの定数定義も準備されている。double型のNaNとfloat型のNaNは等しくない(double型同士やfloat型同士と同じように)。
|
1 2 3 4 5 6 |
double dNan = Double.NaN; float fNan = Float.NaN; System.out.println(dNan); System.out.println(fNan); System.out.println(dNan == fNan); // false System.out.println(dNan != fNan); // true |
InfinityとNaN
InfinityとNaNの演算結果はNaN。
|
1 2 3 4 |
System.out.println(infinity + nan); // NaN System.out.println(infinity - nan); // NaN System.out.println(infinity * nan); // NaN System.out.println(infinity / nan); // NaN |
InfinityとNaNは互いに等しくない。大小関係は特定できない(>でも<でもない)。
|
1 2 3 4 |
System.out.println(infinity == nan); // false System.out.println(infinity != nan); // false System.out.println(infinity > nan); // false System.out.println(infinity < nan); // false |






