我有一段代码,上面写着:添加长双打给出了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 –
这是什么架构和操作系统运行? –