なぜダブルスも持っ-0
ているの+0
ですか?背景と意義は何ですか?
4 に答える
-0
0
(一般的に) *******として扱われます。これは、負の浮動小数点数がゼロに非常に近く、考慮できる場合に発生する可能性があります0
(明確にするために、私は算術アンダーフローを参照しています。次の計算の結果は、実際には小さいだけでなく、正確 に解釈されます。±0
数字)。例えば
System.out.println(-1 / Float.POSITIVE_INFINITY);
-0.0
同じケースを正の数で考えると、古き良きものを受け取ります0
:
System.out.println(1 / Float.POSITIVE_INFINITY);
0.0
*******これは、使用した場合とは-0.0
異なる結果になる場合0.0
です。
System.out.println(1 / 0.0);
System.out.println(1 / -0.0);
インフィニティ -インフィニティ
関数を考えると、これは理にかなっています1 / x
。-側から近づくと正の無限大になりますが、-側から近づくと負x
の無限大になります。関数のグラフはこれを明確にする必要があります:0
+
-
(ソース)
数学用語で:
0
これは、と-0
の計算上の意味での1つの重要な違いを示しています。
ここにいくつかの関連リソースがあり、そのうちのいくつかはすでに取り上げられています。完全を期すために、それらを含めました。
- 署名されたゼロに関するウィキペディアの記事
- 「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」(符号付きゼロのセクションを参照)
- (PDF)「何もないサインビットについての大騒ぎ」 -W。カハンによる興味深い論文。
ウィキペディアから
符号付きゼロは、関連する符号を伴うゼロです。通常の算術では、
−0 = +0 = 0
。コンピューティングでは、いくつかの数値表現に 2つのゼロが存在−0
するという概念が存在します。通常は、「+ 0 」で表さ れ、それぞれ負のゼロと+0
正のゼロを表します(ソース)。
これは、整数の符号と大きさ、および1の補数の符号付き数値表現、およびほとんどの浮動小数点数表現で発生します。数値0は通常+0としてエンコードされますが、+0または-0のいずれかで表すことができます。
によると
IEEE 754 standard
、負のゼロと正のゼロは、CやJavaの==演算子のように、通常の(数値の)比較演算子と同じように比較する必要があります。(ソース)。
ゼロに近い負の浮動小数点数である結果を生成する浮動小数点演算があるが、それを(コンピューターで)表すことができない場合、「-0.0」が生成されます。たとえば- 。5.0 / Float.POSITIVE_INFINITY -> -0.0
とのこの区別により-0.0
、+0.0
エンドユーザーは単にの最終結果を表示するだけでなく、より多くの情報を得ることができ0
ます。当然のことながら、このような概念は、コンピューターのような有限の数値表現の制限があるシステムでのみ実際に役立ちます。数学では、ゼロにどれだけ近いかに関係なく、任意の数を表すことができます。
−0
およびは、またはオーバーフローを引き起こす操作の結果と同様に、アンダーフロー+0
を引き起こすコンピューターによって実行される数学演算の結果です。数学的不確定性を引き起こす演算の場合、結果はNaN(たとえば、 0/ 0)になります。−00
+00
-0.0と0.0の違いは何ですか?
実際には、両方がを表し0
ます。さらに、(-0.0 == 0.0)はtrueを返します。それにもかかわらず:
1/-0.0
-Infinityを生成し、 Infinity1/0.0
を生成します。3 * (+0)
= + 0および+0/-3
= -0。符号付きゼロに対して乗算または除算を実行する場合は、符号規則が適用されます。
すべてのコンピューター科学者が浮動小数点演算について知っておくべきことの「符号付きゼロ」のセクションを参照してください。
Javaのfloatとdoubleのゼロは、真のゼロを表すだけではありません。これらは、正確な結果の大きさが小さすぎて表現できない計算の結果としても使用されます。多くの状況で、負の数のアンダーフローと正の数のアンダーフローには大きな違いがあります。たとえば、x
が非常に小さい正の数の場合、1/x
は正の無限大であり1/(-x)
、負の無限大である必要があります。符号付きゼロは、アンダーフロー結果の符号を保持します。
浮動小数点での符号付きゼロの有用性に関する標準的なリファレンスは、Kahanの論文「複雑な初等関数の分岐カット、または何もない符号ビットについての大騒ぎ」(およびこの主題に関する彼の講演の一部)です。
短いバージョンでは、かなり一般的なエンジニアリングアプリケーションでは、数値法から正しい解を得るには、ゼロに署名することによって保持される符号情報が必要です。ゼロの符号は、ほとんどの実際の操作ではほとんど意味がありませんが、複素数値の関数を考慮したり、等角写像を使用したりすると、ゼロの符号が突然非常に重要になる場合があります。
また、元の(1985)委員会が、浮動小数点演算の射影IEEE-754
モードをサポートすることを検討し、却下したことも注目に値します。このモードでは、符号なし無限大が1つだけ存在します(このようなモードでは、+/-0は意味的に同一です。したがって、エンコーディングが2つある場合でも、ゼロは1つだけになります)。