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

Était-ce utile?

La solution

Il est parce que 1e309 est un littéral qui donne un double. Vous devez utiliser un littéral 1e309L long double.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top