Actual lunga doppia precisione non è d'accordo con std :: numeric_limits
-
23-09-2019 - |
Domanda
di lavoro su Mac OS X 10.6.2, processore Intel, con i686-apple-darwin10-g ++ - 4.2.1, e la compilazione con la bandiera x86_64 -arch, ho appena notato che mentre ...
std::numeric_limits<long double>::max_exponent10 = 4932
... come ci si aspetta, quando un lungo doppio è in realtà costituito da un valore con esponente maggiore di 308, diventa inf -. Vale a dire, in realtà, ha solo 64 bit di precisione, invece di 80bit
Inoltre, sizeof()
sta mostrando long double di essere 16 byte, che dovrebbero essere.
Infine, utilizzando <limits.h>
dà gli stessi risultati di <limits>
.
Qualcuno sa dove la discrepanza potrebbe essere?
long double x = 1e308, y = 1e309;
cout << std::numeric_limits<long double>::max_exponent10 << endl;
cout << x << '\t' << y << endl;
cout << sizeof(x) << endl;
dà
4932
1e + 308 inf
16
Soluzione
E 'perché 1e309
è un letterale che dà un doppio. È necessario utilizzare un 1e309L
-lungo doppio letterale.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow