2008-09-16 83 views
4
#include <iostream> 
using namespace std; 

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

爲什麼正如人們所預料這個偉大的一塊代碼輸出-0,而不是0的,?COUT打印「-0」,而不是「0」

+0

更多的上下文將被讚賞(如編譯器用於開始) – Jean 2008-09-16 15:39:46

回答

13

IEEE 754浮點數標準的符號位與尾數分開,允許零爲負數。 Wikipedia應該能夠幫助解釋這一點。

2

在IEEE浮點0-0正在「特殊值」這兩個不同的值,從here

注意-0和+ 0是不同的 值,但他們都比較作爲 相等。

2

的IEEE 754標準的浮點算法,使一個區別+0-0之間,這可以通過四捨五入爲零凡簽收仍具有重要的非常小的數字打交道時使用。

1

因爲double可以確實有值-0,+ 0,-infinity,+ infinity和NaN,這可能是各種有趣表達式的結果,如0/0。

查看here瞭解更多信息。

1

因爲你的期望是錯誤的。

IEEE要求正負零分別表示。

這就是你在這裏看到的。