2016-08-29 5 views
1

J'utilise le nombre à virgule flottante multiprécision de boost. Je dois mapper un gmp_float à un tanh, puis le prendre comme un double parce que la valeur de tanh sera [0, 1). Lorsque j'utilise convert_to<double>(), je reçois une erreur de compilation, comme indiqué dans l'extrait ci-dessous.boost multiprécision gmp_float convertir_to <double>() donne l'erreur de compilation

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); 

Cependant coulée explicitement à doubler (double)sigmapped_v fonctionne

+0

(Si mon intuition est correcte, vous omettre des informations importantes de la question Si oui, veuillez envisager d'inclure un/testé/SSCCE la prochaine fois) – sehe

Répondre

0

Sortir sur un membre, vous êtes probablement dans un contexte de modèle et float_type est un dépend d'un argument modèle.

Vous devez donner les conseils de type compilateur ici:

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

Sans l'indice homonymie le compilateur analysera < comme operator<

Voir aussi Where and why do I have to put the "template" and "typename" keywords?