Actual long double precision does not agree with std::numeric_limits

Posted by dmb on Stack Overflow See other posts from Stack Overflow or by dmb
Published on 2010-04-02T07:24:46Z Indexed on 2010/04/02 7:33 UTC
Read the original article Hit count: 409

Filed under:
|
|
|
|

Working on Mac OS X 10.6.2, Intel, with i686-apple-darwin10-g++-4.2.1, and compiling with the -arch x86_64 flag, I just noticed that while...

std::numeric_limits<long double>::max_exponent10 = 4932

...as is expected, when a long double is actually set to a value with exponent greater than 308, it becomes inf--ie in reality it only has 64bit precision instead of 80bit.

Also, sizeof() is showing long doubles to be 16 bytes, which they should be.

Finally, using gives the same results as .

Does anyone know where the discrepancy might be?

long double x = 1e308, y = 1e309;
cout << std::numeric_limits::max_exponent10 << endl;
cout << x << '\t' << y << endl;
cout << sizeof(x) << endl;

gives

4932
1e+308 inf
16

© Stack Overflow or respective owner

Related posts about c++

Related posts about g++