Réel à long double précision ne sont pas d'accord avec std :: numeric_limits
-
23-09-2019 - |
Question
Travailler sur Mac OS X 10.6.2, Intel, avec i686-pomme-darwin10-g ++ - 4.2.1, et la compilation avec le drapeau -arch x86_64, je viens de remarquer que, si ...
std::numeric_limits<long double>::max_exponent10 = 4932
... comme on s'y attend, lorsqu'un long double est effectivement mis à une valeur avec un exposant supérieur à 308, il devient inf - dire en réalité, il n'a que la précision de 64 bits au lieu de 80 bits
. En outre, sizeof()
montre long double pour être de 16 octets, qu'ils devraient être.
Enfin, en utilisant <limits.h>
donne les mêmes résultats que <limits>
.
Est-ce que quelqu'un sait où l'écart est peut-être?
long double x = 1e308, y = 1e309;
cout << std::numeric_limits<long double>::max_exponent10 << endl;
cout << x << '\t' << y << endl;
cout << sizeof(x) << endl;
donne
4932
1E + 308 inf
16
La solution
Il est parce que 1e309
est un littéral qui donne un double. Vous devez utiliser un littéral 1e309L
long double.