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;

  

4932
  1e + 308 inf
  16

È stato utile?

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
scroll top