如何提高大量C 的POW精度(10^19)

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

本文关键字:精度 POW 何提高      更新时间:2023-10-16

我想计算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位double仅给出53位或约15位小数的精度。

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

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

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