次のようなコードのセクションがあります。
std::cerr << val1 << " " << val2 << std::endl;
val1 = val1 + val2;
std::cerr << val1 << std::endl;
val1とval2はどちらもlongdoubleです。
問題は、これの結果が次のとおりであるという事実から来ています。
-5.000000000000722771452063564190e-01 2.710505431213761085018632002175e-20
-5.000000000000722771452063564190e-01
これは意味がありません。val2はval1に追加されていないようですが、追加できる情報の小数部分には明らかに十分な情報がありval1
ますval2
。
私は困惑しています、誰かが何かアイデアがありますか?
私はGCC4.2を使用していると思います。G ++はIEEE四倍精度形式を使用しますか?または、他の何か(80ビットの拡張精度など、この問題を説明します(ただし、なぜ小数点以下18桁以上が表示されるのですか?)。