如何提高 C++ 中大数 (10^19) 的 pow 精度?

How to raise the precision of pow in C++ for large numbers (10^19)?

我正在计算 9^19。我的代码是:

    cout.setf(ios::fixed, ios::floatfield);
    cout.setf(ios::showpoint);
    cout<<pow(9,19)<<endl;

结果的最后 2 位数字等于 01350851717672992000。在 Python 中,9**19 得到了我 1350851717672992089L 。似乎是一个浮点数问题。我怎样才能提高 pow 的精度?或如何执行比 pow 更精确的功率?

我正在使用 gcc 版本 4.8.2 进行编译。

这确实是一个浮点数问题:典型的 64-bit double 只给出 53 位,或大约 15 个十进制数字的精度。

您可能(或可能不会)从 long double 获得更高的精度。或者,对于最大约 1019 的整数,您可以使用 uint64_t。否则,没有更精确的标准类型:您需要一个库,例如 GMP or Boost.Multiprecision.

double的精度大约为 16 位小数。

这意味着,只有前 16 位十进制数字是准确的,其余数字与噪声一样好。