0

次のコード

#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/cpp_int.hpp>

typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> float_50; 

int main()
{
    float_50 a = boost::multiprecision::pow((float_50)5, (float_50)10); // works
    double b = boost::multiprecision::pow((double)5, (double)10);       // doesn't work

    //double b = boost::multiprecision::pow<double>((double)5, (double)10); // Why can't be overloaded?
    return 0;
}

boost::multiprecision::powは固定精度型を認識しないため、コンパイルできません。これに対する通常の解決策は何ですか?pow多精度型と固定精度型の両方を受け入れる単一の関数が必要です。たとえば、ブースト定数にテンプレート定義があるのは奇妙です。

boost::math::constants::pi<double>()
boost::math::constants::pi<float_50>()

うまく動作します。オーバーロードするべきではboost::multiprecision::powありませんか?

4

2 に答える 2

0

解決策は、名前空間を除外することです。

#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/cpp_int.hpp>

typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> float_50; 

int main()
{
    float_50 a = pow((float_50)5, (float_50)10); 
    double b = pow(5., 10.);      
    return 0;
}
于 2020-09-15T08:27:43.453 に答える