これら3つの特別な浮動小数点値は何を意味しますか:正の無限大、負の無限大、NaN
-
06-07-2019 - |
質問
コードでそれらを使用するにはどうすればよいですか?また、NaN(数値ではない)の原因は何ですか?
解決
これは、フローティングの詳細を知りたい場合に適したリファレンスです。 Javaのポイント番号。
正の無限大は、通常表現できないほど大きい正の数です。負の無限大は、通常表現できないほど大きい負の数です。 NaNは「数字ではない」という意味です。そして、0を0で割るような数字を生成しない数学演算の結果です。
Javaでは、DoubleクラスとFloatクラスの両方に、3つのケースすべてを表す定数があります。 POSITIVE_INFINITY、NEGATIVE_INFINITY、およびNaNです。
さらにこれを考慮してください:
double a = Math.pow(10, 600) - Math.pow(10, 600); //==NaN
数学的には、誰もが0であることがわかります。しかし、マシンにとっては、「無限大」です。 -「無限大」 (同じランクの)、これは確かにNaNです。
他のヒント
- 正の無限大とは、正の方向に無限大になることを意味します。正の方向に大きくなる値になります。
- 負の無限大とは、負の方向に無限大になることを意味します。負の方向に大きくなる値になります。
- Not-a-number (NaN)は、結果など、未定義のものです。
0/0
の。
および Float
クラス:
詳細については、 WikipediaのIEEE-754ページをご覧ください。 p>
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 + 2.0 = NaN
- -1/0は負の無限大になります。
Infinity(java)は、演算の結果が非常に大きな正または負の数になるため、正常に表現できないことを意味します。
アイデアは、「通常」の操作から自然に発生する可能性がある特別な数値を表すことです。数字。 「オーバーフロー」として無限大(正と負の両方)を見ることができます。少なくともいくつかの条件では、関数によってそのような値が返されると、意味のある結果が得られるという考え方です。たとえば、まだいくつかの順序付けプロパティがあります(たとえば、並べ替え操作を台無しにしません)。
Nanは非常に特殊です。xがNanの場合、x == xはfalseです(実際、少なくともCでnanをテストする1つの方法です)。浮動小数点の特性に慣れていない場合、これは非常に混乱する可能性があります。科学的な計算を行わない限り、少なくとも思い浮かぶほとんどの場合、操作によってナンが返されるのはバグだと思います。 Nanはさまざまな操作に対応できます:0/0、inf-inf、inf / inf、0 * inf。ナンには注文プロパティもありません。
これらを他の番号として使用できます:
e.g:
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であることがわかりますが、マシンにとっては「無限大」です。 -" Infinity"(同じ順序の)魔女は本当にNaN ...