質問
#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
なぜこの素晴らしいコードが出力するのか -0
そしてそうではありません 0
, 、やはり?
解決
浮動小数点数の IEEE 754 標準では、仮数とは別の符号ビットがあり、ゼロが負の値になることが許可されています。 ウィキペディア これを説明できるはずです。
他のヒント
IEEE 浮動小数点の場合 0
そして -0
両方とも異なる値であり、 ここ 「特別な値」の下:
-0と+0は異なる値であることに注意してください。ただし、どちらも等しいと比較されます。
浮動小数点演算の IEEE 754 標準では、以下を区別しています。 +0
そして -0
, 、これは、符号が依然として重要である、ゼロに丸められる非常に小さな数値を扱うときに使用できます。
なぜなら、「負のゼロ」は有効な数値だからです。
この記事を見てください。 http://en.wikipedia.org/wiki/Floating_point. 。値がゼロであっても、符号ビットがあることに注意してください。
なぜなら、double は実際に値 -0、+0、-infinity、+infinity、NaN を持つことができ、これらは 0/0 などのさまざまな興味深い式の結果になる可能性があるからです。
見て ここ 詳細については。
あなたの期待は間違っているからです。
IEEE では、正のゼロと負のゼロを別々に表すことが要求されています。
それがここで見ているものです。
所属していません StackOverflow