4
#include <iostream>
using namespace std;

int main()
{
    double u = 0;
    double w = -u;
    cout << w << endl;
    return 0;
}

なぜこの素晴らしいコードが出力され、期待どおりに出力-0されないのでしょうか?0

4

7 に答える 7

13

浮動小数点数の IEEE 754 標準では、仮数部とは別の符号ビットがあり、ゼロを負にすることができます。 ウィキペディアはこれを説明するのに役立つはずです。

于 2008-09-16T15:39:20.013 に答える
2

IEEE 浮動小数点では、0-0は両方とも異なる値です。ここから「特別な値」の下に:

-0 と +0 は異なる値ですが、比較するとどちらも等しいことに注意してください。

于 2008-09-16T15:40:51.897 に答える
2

+0浮動小数点演算の IEEE 754 標準では、とが区別-0されます。これは、符号がまだ重要なゼロに丸められた非常に小さな数値を扱う場合に使用できます。

于 2008-09-16T15:42:13.533 に答える
1

「負のゼロ」は有効な数値だからです!

http://en.wikipedia.org/wiki/%E2%88%920_(数値)

于 2008-09-16T15:39:49.997 に答える
1

この記事をご覧ください: http://en.wikipedia.org/wiki/Floating_point . 値がゼロの場合でも、符号ビットがあることに注意してください。

于 2008-09-16T15:40:25.877 に答える
1

double は実際に値 -0、+0、-infinity、+infinity、および NaN を持つことができるため、0/0 などのさまざまな興味深い式の結果である可能性があります。

詳しくはこちらをご覧ください。

于 2008-09-16T15:42:43.343 に答える
1

あなたの期待は間違っているからです。

IEEE では、正のゼロと負のゼロを別々に表す必要があります。

それがあなたがここで見ているものです。

于 2008-09-16T15:49:34.950 に答える