Pergunta

Trabalhando no Mac OS X 10.6.2, Intel, com I686-Apple-Darwin10-G ++-4.2.1, e compilando com a bandeira -Arch x86_64, acabei de notar isso enquanto ...

std::numeric_limits<long double>::max_exponent10 = 4932

... Como é esperado, quando um duplo longo é realmente definido como um valor com expoente maior que 308, torna-se inf-na realidade, possui apenas 64 bits de precisão em vez de 80 bits.

Também, sizeof() está mostrando longos duplos para ter 16 bytes, o que deveriam ser.

Finalmente, usando <limits.h> fornece os mesmos resultados que <limits>.

Alguém sabe onde a discrepância pode estar?

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

Foi útil?

Solução

É porque 1e309 é um literal que dá um dobro. Você precisa usar um literal há muito tempo 1e309L.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top