boost multiprecision gmp_float convert_to <double>()给出了编译错误

时间:2016-08-29 16:52:19

标签: boost gmp multiprecision boost-multiprecision

我正在使用boost multiprecision库浮点数。我需要将gmp_float映射到tanh,然后将其作为双精度值,因为tanh的值为[0, 1)。当我使用convert_to<double>()时,我会收到编译错误,如下面的代码段所示。

typedef boost::multiprecision::number<boost::multiprecision::gmp_float<4>> float_type;

float_type previous_v = agent->_velocity(i, j);
float_type sigmapped_v = boost::multiprecision::tanh(previous_v);
double sigmoid_velocity = sigmapped_v.convert_to<double>();
// expected primary-expression before ‘double’ ^^

double v_probable = abs(sigmoid_velocity);

然而明确地将其强制转换为加倍(double)sigmapped_v

1 个答案:

答案 0 :(得分:1)

走出困境,您可能处于模板上下文中,float_type取决于模板参数。

您需要在此处提供编译器类型提示:

double sigmoid_velocity = sigmapped_v.template convert_to<double>();
//                                    ^^

如果没有消除歧义提示,编译器会将<解析为operator<

另见Where and why do I have to put the "template" and "typename" keywords?