0

5^64生成するはずのブースト多精度ライブラリを使用して計算する必要がありますが、542101086242752217003726400434970855712890625取得boost::multiprecision::pow()して取得mpfloatします542101086242752217003726392492611895881105408

ただし、ループして繰り返し乗算するmpintと、正しい結果が得られます。

バグですか?または私はboost::multiprecision::pow()間違った方法で使用していますか?または私は使用する代わりがありboost::multiprecision::pow()ますか?

#include <iostream>
#include <string>
#include <boost/multiprecision/gmp.hpp> 

typedef boost::multiprecision::mpz_int mpint;
typedef boost::multiprecision::number<boost::multiprecision::gmp_float<4> > mpfloat;

int main(){
    mpfloat p = boost::multiprecision::pow(mpfloat(5), mpfloat(64));
    std::cout << p.template convert_to<mpint>() << std::endl;

    mpint res(1);
    for(int i = 0; i < 64; ++i){
        res = res * 5;
    }
    std::cout << res << std::endl;
}
4

0 に答える 0