コードでそれらをどのように使用できますか? また、NaN (数値ではない) の原因は何ですか?
6 に答える
- 正の無限大とは、正の方向に無限大になることを意味します。正の方向に大きくなるほど値が大きくなります。
- 負の無限大とは、負の方向に無限大になることを意味します。負の方向に大きくなるほど値が大きくなります。
- 非数(NaN) は、 の結果など、定義されていないものです
0/0
。
そして、Float
クラスの仕様からの定数:
詳細については、Wikipedia の IEEE-754 ページを参照してください。
3 つの定数を説明する小さなプログラムを次に示します。
System.out.println(0f / 0f);
System.out.println(1f / 0f);
System.out.println(-1f / 0f);
出力:
NaN
Infinity
-Infinity
- 1/0 は正の無限大になります。
- 0/0 は Nan になります。NaN を他の数値として使用できます。たとえば、NaN+NaN=NaN、NaN+2.0=NaN です。
- -1/0 は負の無限大になります。
無限大 (Java で) は、演算の結果が非常に大きな正または負の数になり、通常は表現できないことを意味します。
アイデアは、「正規」数の操作から自然に発生する可能性のある特別な数を表すことです。無限大(正と負の両方)を浮動小数点表現の「オーバーフロー」と見なすことができます。少なくとも一部の条件では、関数によってそのような値が返されると、意味のある結果が得られるという考えです。たとえば、まだいくつかの順序付けプロパティがあります(たとえば、並べ替え操作を台無しにすることはありません)。
Nanは非常に特殊です。xがNanの場合、x == xはfalseです(これは、実際には、少なくともCでnanをテストする1つの方法です)。浮動小数点の特性に慣れていない場合、これは非常に混乱する可能性があります。科学的な計算をしない限り、少なくともほとんどの場合、頭に浮かぶのは、操作によってNanが返されるのはバグだと思います。Nanは、さまざまな操作に使用できます:0/0、inf-inf、inf / inf、0*inf。Nanには注文プロパティもありません。
他の番号と同じように使用できます。
例えば:
float min = Float.NEGATIVE_INFINITY;
float max = Float.POSITIVE_INFINITY;
float nan = Float.NaN;
正の無限大は、通常は表現できないほど大きい正の数です。負の無限大は、通常は表現できないほど大きい負の数です。NaN は「非数」を意味し、0 を 0 で除算するなど、数値を生成しない数学演算の結果です。
これは完全な答えではありません(または十分に明確化されていません)-これを考慮してください:
double a = Math.pow(10,600) - Math.pow(10,600); //==NaN
数学的には誰もがそれが 0 であることを確認できますが、マシンにとっては「無限大」です - 「無限大」(同じ次数) の魔女は実際に NaN です...