5

In my question about Analysis of float/double precision in 32 decimal digits, one answer said to take a look at __float128.

I used it and the compiler could find it, but I can not print it, since the complier can not find the header quadmath.h.

So my questions are:

  1. __float128 is standard, correct?
  2. How to print it?
  3. Isn't quadmath.h standard?

These answers did not help:

  1. Use extern C
  2. Precision in C++
  3. Printing

The ref also did not help.

Note that I do not want to use any non standard library.

[EDIT]

It would be also useful, if that question had an answer, even if the answer was a negative one.

Community
  • 1
  • 1
gsamaras
  • 71,951
  • 46
  • 188
  • 305

3 Answers3

2

Using the boost library was the best answer for me:

#include <boost/multiprecision/float128.hpp>
#include <boost/math/special_functions/gamma.hpp>

using namespace boost::multiprecision;  

float128 su1= 0.33333333333333333q;
cout << "su1=" << su1 << endl;

Remember to link this library:

-lquadmath
  • And for those who insist on perfect precision, try this BCD library: https://github.com/edwig/bcd It's MS Windows specific but I hacked up my personal copy to remove the Windows dependencies. – Chris Pollitt Sep 25 '20 at 07:22
1

Work in GNU-Fortran! It allows to run the same program in different precision: single (32 bit), double (64 bit), extended (80 bit) and quad (128 bit). You don't have to do any changes in the program, you simply write 'real' for all floating points. The size of floating points is set by compiler options -freal-4-real-8, -freal-4-real-10 and -freal-4-real-16.

Oleg
  • 11
  • 1
0

No, it's not standard - neither the type nor the header. That's why the type has a double underscore (reserved name). Apparently, quadmath.h provides a quadmath_snprintf method. In C++ you would have used <<, of course.

MSalters
  • 173,980
  • 10
  • 155
  • 350
  • 1
    No you can't. `__float128` will cause a syntax error when used with `<<`. Edit the answer and I will be happy to accept it, thanks. Or if you know how to make it work with `<<`, feel free to teach me(us). – gsamaras May 14 '14 at 13:15
  • @G.Samaras: I wrote "would" instead of "can" because it's a hypothetical - if `quadmath` was a C++ library, it would offer `<<`. – MSalters May 14 '14 at 13:26
  • IMHO, your syntax is misleading. However the comment clears that. You seem to have the experience whether to edit or not. Accept and +1. – gsamaras May 14 '14 at 13:28
  • Fair point, it's easy to be too subtle on the Internet. Fixed. – MSalters May 14 '14 at 13:33