如何提高 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 位数字等于 0
:1350851717672992000
。在 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 位十进制数字是准确的,其余数字与噪声一样好。
我正在计算 9^19
。我的代码是:
cout.setf(ios::fixed, ios::floatfield);
cout.setf(ios::showpoint);
cout<<pow(9,19)<<endl;
结果的最后 2 位数字等于 0
:1350851717672992000
。在 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 位十进制数字是准确的,其余数字与噪声一样好。