2017-10-09 3 views
0
cout << 0 * -5 << endl; // this is zero 
cout << 0 * -5.0 << endl; // this is negative zero 

私はC++を初めて使いました。なぜなら、倍精度浮動小数点数の乗算は、常に0になるはずなので、0倍に影響します。0を負の倍数で乗算すると、なぜ0になるのですか?

+0

0回何もゼロでないという正気のルールセットは、負のゼロが正のゼロと等価であるとも言います。これがあなたを煩わせるなら、あなたは奇妙で矛盾したルールを使用しています。 –

+1

負のゼロは浮動小数点の世界のものです。あなたが[概念的に準備されていない]場合は、奇妙なことが起こります(https://en.wikipedia.org/wiki/Signed_zero)。 – tadman

答えて

2

cout << 0 * -5 << endl; 

0および-5の両方は、符号付き整数です。整数は0-0を区別しません。 0は、IEEE浮動小数点の両方0-0値を定義するために、二重同様に昇格されますように、第2ラインで

cout << 0 * -5.0 << endl; 

2番目の数字は、二重です。

1

整数と倍数の計算の違いから来ています。最初の式は2つの整数の間で行われますが、2番目の式は2つの浮動小数点数の間にあります。最初の行で

関連する問題