のようなものを書くとき
double a = 0.0;
double b = 0.0;
double c = a/b;
結果は ですDouble.NaN
が、整数に対して同じことを試みると、 が生成されますArithmeticException
。では、なぜ がないのInteger.NaN
でしょうか。
NaN
他の言語に整数がないのと同じ理由で。
最新のコンピューターは、整数に 2 の補数バイナリ表現を使用しますが、その表現には NaN 値がありません。(表現型のドメイン内のすべての値は、明確な整数を表します。)
したがって、コンピューターの整数演算ハードウェアは NaN 表現を認識しません。
理論的には、誰かが NaN (または INF、またはその他のエキゾチックな値) を含む整数の代替表現を発明することができます。ただし、このような表現を使用した算術演算は、ハードウェアでサポートされていません。これをソフトウェアで実装することは可能ですが、法外に費用がかかり1 ...、このサポートを Java 言語に含めることは他の点でも望ましくありません。
1 - もちろん相対的ですが、NaN のソフトウェア実装は (少なくとも) ハードウェアよりも 1 桁遅くなると予想されます。あなたが実際にこれを本当に必要としているなら、それは受け入れられるでしょう。しかし、整数算術コードの大部分はこれを必要としません。ほとんどの場合、「ゼロ除算」の例外をスローすることは問題なく、すべての整数算術演算で桁違いに遅くなることは...受け入れられません。
対照的に: