Real a largo doble precisión no está de acuerdo con std :: numeric_limits
-
23-09-2019 - |
Pregunta
Trabajo en Mac OS X 10.6.2, Intel, con i686-manzana-darwin10-g ++ - 4.2.1, y compilar con la bandera x86_64 -arch, sólo se dio cuenta de que mientras ...
std::numeric_limits<long double>::max_exponent10 = 4932
... como es de esperar, cuando una larga doble es en realidad establece en un valor con una mayor exponente de 308, se convierte en inf. - es decir, en realidad sólo tiene una precisión de 64 bits en lugar de 80bit
Además, sizeof()
está mostrando dobles largos a ser de 16 bytes, lo que deberían ser.
Finalmente, utilizando <limits.h>
da los mismos resultados que <limits>
.
¿Alguien sabe donde la discrepancia podría ser?
long double x = 1e308, y = 1e309;
cout << std::numeric_limits<long double>::max_exponent10 << endl;
cout << x << '\t' << y << endl;
cout << sizeof(x) << endl;
da
4932
1e + 308 inf
16
Solución
Es porque 1e309
es un literal que da un doble. Es necesario utilizar un 1e309L
largo doble literal.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow