#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
なぜこの素晴らしいコードが出力され、期待どおりに出力-0
されないのでしょうか?0
#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 は異なる値ですが、比較するとどちらも等しいことに注意してください。
+0
浮動小数点演算の IEEE 754 標準では、とが区別-0
されます。これは、符号がまだ重要なゼロに丸められた非常に小さな数値を扱う場合に使用できます。
「負のゼロ」は有効な数値だからです!
この記事をご覧ください: http://en.wikipedia.org/wiki/Floating_point . 値がゼロの場合でも、符号ビットがあることに注意してください。
double は実際に値 -0、+0、-infinity、+infinity、および NaN を持つことができるため、0/0 などのさまざまな興味深い式の結果である可能性があります。
詳しくはこちらをご覧ください。
あなたの期待は間違っているからです。
IEEE では、正のゼロと負のゼロを別々に表す必要があります。
それがあなたがここで見ているものです。