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 常量,例如,有模板定义

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 回答
-2

单个函数无法处理不同类型的参数。对于每个受支持的参数集,您需要一个单独的函数。该函数可能是从模板自动生成的——但pow似乎不是模板实现的候选者。

于 2020-09-15T07:28:27.393 回答