I'm trying to use __float128
in my C++ program.
However I'm in trouble with compiling it.
Here is simple c++ code (test.cc):
#include <iostream>
#include <quadmath.h>
using namespace std;
int main(){
__float128 r=0.0q;
__float128 exp_d = expq(12.45q);
cout << "r=" << (double)r << endl;
cout << "exp_d=" << (double)exp_d << endl;
}
And I compile this code with
g++ test.cc -lquadmath -std=c++11
which comes with following error
error:unable to find numeric literal operator 'operateor"" q'
How can I fix it?
Gcc-5 prints this helpful additional note:
note: use
-std=gnu++11
or-fext-numeric-literals
to enable more built-in suffixes
As I commented earlier, I think your problem is that the C++11 literal handling is pre-empting the GCC-specific C extension that handles the q
suffix. Try providing a C++11 operator - as below:
#include <iostream>
extern "C"
{
#include <quadmath.h>
}
__float128 operator ""q(const char* p)
{
return strtoflt128(p, NULL);
}
int main()
{
__float128 x = expq(282.49q);
char buffer[128];
quadmath_snprintf(buffer, sizeof buffer, "%.36Qg\n", x);
std::cout << buffer << '\n';
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With