C++: convert "boost::multiprecision::float128" to "double"
Asked Answered
M

1

6

I'm using the boost multiprecision library, and more precisely the boost::multiprecision::float128 type. Using ICPC for compiling, I get some errors when trying to to do something like:

double a = functionA();

where functionA() return a boost::multiprecision::float128 variable.

error: no suitable conversion function from "boost::multiprecision::float128" to "double" exists|

How can I solve this?

Menorca answered 30/1, 2015 at 17:43 Comment(3)
What happens if you assign the result of float128_backend?Manager
If functionA() returns a boost::multiprecision::backends::float128_backend, I get: error: cannot convert ‘const boost::multiprecision::backends::float128_backend’ to ‘double’ in initialization|Menorca
It's a member function you have to call.Manager
B
16

From the Boost documentation:

A number can be converted to any built in type, via the convert_to member function:

mpz_int z(2);
double i = z.convert_to<double>(); // sets i to 2

http://www.boost.org/doc/libs/1_57_0/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html

Bernice answered 30/1, 2015 at 18:3 Comment(1)
thank you for your answer! Just another detail: since functionA() is a template function, and can returns a double or a boost::multiprecision::float128 variable, is there a way to keep the above syntax "double a = functionA();" but using your converter function? do I need to create a custom cast operator?Menorca

© 2022 - 2024 — McMap. All rights reserved.