我有一段代碼,上面寫着:添加長雙打給出了C中的錯誤的答案++
std::cerr << val1 << " " << val2 << std::endl;
val1 = val1 + val2;
std::cerr << val1 << std::endl;
兩個VAL1和val2長一倍。
的問題來自於一個事實,即這樣做的結果是:
-5.000000000000722771452063564190e-01 2.710505431213761085018632002175e-20
-5.000000000000722771452063564190e-01
這是沒有意義的。看來val2沒有被添加到val1中,但是,在val1
的小數部分顯然有足夠的信息可以將val2
添加到它。
我很難過,任何人有任何想法?
我使用GCC 4.2我相信。 G ++是否使用IEEE四倍精度格式?或者別的東西(比如80位擴展精度,這可以解釋這個問題(儘管爲什麼會出現超過18個小數位?)
和最新的'的實際價值val1'&'val2' ?? – perilbrain
Obligatory Goldberg鏈接:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html –
這是什麼架構和操作系統運行? –