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

Big*_*her 4 c++ floating-accuracy floating-point-precision

我想要计算9^19.我的代码是:

    cout.setf(ios::fixed, ios::floatfield);
    cout.setf(ios::showpoint);
    cout<<pow(9,19)<<endl;
Run Code Online (Sandbox Code Playgroud)

结果的最后2位数等于0:1350851717672992000.在Python中,9**19得到了我1350851717672992089L.似乎浮点问题.我怎么能提高精度pow?或者如何预制更好的精密功率pow

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

Mik*_*our 9

这确实是一个浮点问题:典型的64位double仅提供53位,或大约15位十进制数字的精度.

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