1

一部の計算では unsigned long long int を使用していましたが、

std::cout << std::setprecision(30) << 900000000000001i64+4*pow(10, 16);

出力を与える:40900000000000000

この

std::cout << std::setprecision(30) << 900000000000011i64+4*pow(10, 16);

出力を与える:40900000000000008

今、私は何が起こっているのか分かりません。印刷の試みを削除i64しようとすると4*pow(10, 16)、正しい結果が得られ、直接40000000000000000印刷しようとすると、正しい結果が印刷されます。4090000000000001110^14 の累乗では正常に動作しますが、その後、奇妙な動作を開始します。

誰かが何が起こっているのか説明できますか?

4

2 に答える 2