一部の計算では 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
印刷しようとすると、正しい結果が印刷されます。40900000000000011
10^14 の累乗では正常に動作しますが、その後、奇妙な動作を開始します。
誰かが何が起こっているのか説明できますか?