我有一段代码如下:
std::cerr << val1 << " " << val2 << std::endl;
val1 = val1 + val2;
std::cerr << val1 << std::endl;
val1 和 val2 都是 long double。
问题来自这样一个事实,即结果是:
-5.000000000000722771452063564190e-01 2.710505431213761085018632002175e-20
-5.000000000000722771452063564190e-01
这没有任何意义。看来 val2 没有被添加到 val1,但是,显然有足够的信息可以添加到它的小数val1
部分val2
。
我被难住了,有人有什么想法吗?
我相信我正在使用 GCC 4.2。G++ 是否使用 IEEE 四精度格式?或者其他的东西(比如 80 位扩展精度,它可以解释这个问题(尽管为什么会出现超过 18 个小数位呢?)。