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

时间:2015-05-13 12:45:49

标签: c++ floating-accuracy floating-point-precision

我希望计算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进行编译。

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:1)

double的精度约为16位十进制数。

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