longa dupla vs dupla

Eu sei que o tamanho de vários tipos de dados pode mudar dependendo do sistema em que estou. Eu uso XP 32bits, e usando o operador sizeof () em C ++, parece que long double é 12 bytes e double é 8.

No entanto, a maioria das principais fonts declara que o double long é de 8 bytes e o intervalo é, portanto, o mesmo que um double.

Por que eu tenho 12 bytes? Se long double é de fato 12 bytes, isso também não estende o intervalo de valor? Ou a assinatura longa é usada apenas (as figuras do compilador) quando o valor excede o intervalo de um duplo e, portanto, se estende além de 8 bytes?

Obrigado.

Citando da Wikipedia :

Na arquitetura x86, a maioria dos compiladores implementa o double long como o tipo de precisão estendida de 80 bits suportado por esse hardware (às vezes armazenado como 12 ou 16 bytes para manter a estrutura de dados.

e

Os compiladores também podem usar o double long para um formato de precisão quádrupla de 128 bits, que atualmente é implementado em software.

Em outras palavras, sim, um long double pode ser capaz de armazenar um intervalo maior de valores do que um double . Mas é completamente com o compilador.

Para os compiladores modernos em x64, o Clang e o GCC usam o dobro de 16 bytes para o long double enquanto o VC ++ usa o dobro de 8 bytes. Em outras palavras, com Clang e GCC você obtém maior precisão dupla, mas para VC ++ long double é igual a double . Os modernos processadores x86 suportam essas dobras de 16 bytes, então acho que o Clang e o GCC estão fazendo a coisa certa e permite que você acesse a capacidade de hardware de nível mais baixo usando primitivas de linguagem de nível mais alto.

Os tamanhos padrão de bytes para números são os tamanhos mínimos garantidos em todas as plataformas. Eles podem ser maiores em alguns sistemas, mas nunca serão menores.

No que diz respeito à minha experiência de novato em programação:

  • Use float periodicamente normalizado [-1,0, + 1,0]

  • Segure o valor de normalização separadamente com duplo ou duplo longo

  • Normalizar introduz ruído = pequenos erros = altas frequências para valores de variables

  • De tempos em tempos, é útil normalizar com o valor médio mantido separadamente e manter os dados ordenados (a ordem de dados original pode ser salva como vetor de permutação)