Qual é a diferença entre uma operação de ponto flutuante de precisão única e operação flutuante de precisão dupla?
Estou especialmente interessado em termos práticos em relação aos consoles de videogame. Por exemplo, o Nintendo 64 tem um processador de 64 bits e, se isso acontecer, isso significaria que era capaz de operações de ponto flutuante de precisão dupla? O PS3 e o Xbox 360 podem executar operações de ponto flutuante de precisão dupla ou apenas precisão única e, em uso geral, são usados os recursos de precisão dupla (se existirem?).
floating-point
precision
processor
operations
tweetypi
fonte
fonte
Respostas:
Nota: o Nintendo 64 possui um processador de 64 bits, no entanto:
Da Webopedia :
O formato de precisão dupla IEEE, na verdade, tem mais do que o dobro de bits de precisão que o formato de precisão única, além de uma faixa muito maior.
Do padrão IEEE para aritmética de ponto flutuante
Precisão única
A representação padrão de ponto flutuante de precisão única IEEE requer uma palavra de 32 bits, que pode ser representada como numerada de 0 a 31, da esquerda para a direita.
os 23 bits finais são a fração 'F':
O valor V representado pela palavra pode ser determinado da seguinte forma:
0<E<255
então, emV=(-1)**S * 2 ** (E-127) * (1.F)
que "1.F" pretende representar o número binário criado prefixando F com um líder implícito 1 e um ponto binário.V=(-1)**S * 2 ** (-126) * (0.F)
. Esses são valores "não normalizados".Em particular,
Dupla precisão
A representação padrão de ponto flutuante de precisão dupla IEEE requer uma palavra de 64 bits, que pode ser representada como numerada de 0 a 63, da esquerda para a direita.
os 52 bits finais são a fração 'F':
O valor V representado pela palavra pode ser determinado da seguinte forma:
0<E<2047
então, emV=(-1)**S * 2 ** (E-1023) * (1.F)
que "1.F" pretende representar o número binário criado prefixando F com um líder implícito 1 e um ponto binário.V=(-1)**S * 2 ** (-1022) * (0.F)
esses são valores "não normalizados".Referência:
Padrão ANSI / IEEE 754-1985,
Padrão para aritmética de ponto flutuante binário.
fonte
**
' é ExponenciaçãoLi muitas respostas, mas nenhuma parece explicar corretamente de onde vem a palavra duplo . Lembro-me de uma explicação muito boa dada por um professor universitário que tive alguns anos atrás.
Recordando o estilo da resposta do VonC, uma única representação de ponto flutuante de precisão usa uma palavra de 32 bits.
Representação:
(Apenas para salientar, o bit de sinal é o último, não o primeiro.)
Uma representação de ponto flutuante de precisão dupla usa uma palavra de 64 bits.
Representação:
Como você pode notar, escrevi que a mantissa possui, em ambos os tipos, um pouco mais de informação em comparação com sua representação. De fato, a mantissa é um número representado sem todo o seu não significativo
0
. Por exemplo,Isso significa que a mantissa sempre estará na forma
0.α 1 α 2 ... α t × β p
onde β é a base da representação. Mas uma vez que a fracção é um número binário, ácido a 1 irá sempre ser igual a 1, assim, a fracção pode ser reescrita como 1.α 2 α 3 ... α t + 1 × 2 p e o inicial 1 pode ser assumido implicitamente, abrindo espaço para um bit extra (α t + 1 ).
Agora, é obviamente verdade que o dobro de 32 é 64, mas não é daí que a palavra vem.
A precisão indica o número de dígitos decimais que estão corretos , ou seja, sem qualquer tipo de erro de representação ou aproximação. Em outras palavras, indica quantos dígitos decimais podem ser usados com segurança .
Com isso dito, é fácil estimar o número de dígitos decimais que podem ser usados com segurança:
fonte
Ok, a diferença básica na máquina é que a precisão dupla usa duas vezes mais bits que um único. Na implementação usual, são 32 bits para um único e 64 bits para o dobro.
Mas o que isso significa ? Se assumirmos o padrão IEEE, um único número de precisão terá cerca de 23 bits da mantissa e um expoente máximo de cerca de 38; uma precisão dupla tem 52 bits para a mantissa e um expoente máximo de cerca de 308.
Os detalhes estão na Wikipedia , como sempre.
fonte
Para adicionar a todas as respostas maravilhosas aqui
Antes de mais, float e double são usados para representação de números números fracionários. Portanto, a diferença entre os dois decorre do fato de com que precisão eles podem armazenar os números.
Então, basicamente, queremos saber com que precisão o número pode ser armazenado e é o que chamamos de precisão.
Citando @Alessandro aqui
O flutuador pode armazenar com precisão de 7 a 8 dígitos na parte fracionária, enquanto o Double pode armazenar com precisão de 15 a 16 dígitos na parte fracionária
Assim, o flutuador pode armazenar o dobro da quantidade de peça fracionária. É por isso que Double é chamado de double the float
fonte
Quanto à pergunta "O ps3 e o xbxo 360 podem executar operações de ponto flutuante de precisão dupla ou apenas precisão única e em uso generoso são os recursos de precisão dupla usados (se existirem?)".
Eu acredito que ambas as plataformas são incapazes de ponto flutuante duplo. O processador Cell original tinha apenas flutuadores de 32 bits, o mesmo com o hardware da ATI no qual o XBox 360 se baseia (R600). O Cell recebeu suporte de ponto flutuante duplo mais tarde, mas tenho certeza de que o PS3 não usa esse brilho.
fonte
Basicamente, a aritmética de ponto flutuante de precisão simples lida com números de ponto flutuante de 32 bits, enquanto a precisão dupla lida com 64 bits.
O número de bits em precisão dupla aumenta o valor máximo que pode ser armazenado, além de aumentar a precisão (ou seja, o número de dígitos significativos).
fonte
Todos explicaram em grande detalhe e nada que eu possa acrescentar mais. Embora eu queira explicá-lo nos Termos de Layman ou em inglês simples
.....
Uma variável capaz de armazenar ou representar "1,9" fornece menos precisão do que aquela capaz de armazenar ou representar 1,9999. Essas frações podem representar uma enorme diferença em grandes cálculos.
fonte
Dupla precisão significa que os números levam o dobro do comprimento da palavra para armazenar. Em um processador de 32 bits, as palavras são de 32 bits; portanto, o dobro é de 64 bits. O que isso significa em termos de desempenho é que as operações em números de precisão dupla demoram um pouco mais para serem executadas. Portanto, você obtém um alcance melhor, mas há um pequeno impacto no desempenho. Esse impacto é mitigado um pouco pelas unidades de ponto flutuante do hardware, mas ainda está lá.
O N64 usou um NEC VR4300 baseado em MIPS R4300i, que é um processador de 64 bits, mas o processador se comunica com o restante do sistema através de um barramento de 32 bits. Portanto, a maioria dos desenvolvedores usava números de 32 bits por serem mais rápidos, e a maioria dos jogos na época não precisava de precisão adicional (então eles usavam flutuadores e não duplos).
Todos os três sistemas podem executar operações flutuantes de precisão única e dupla, mas podem não ser por causa do desempenho. (embora praticamente tudo depois do n64 tenha usado um barramento de 32 bits, então ...)
fonte
Antes de mais, float e double são usados para representação de números números fracionários. Portanto, a diferença entre os dois decorre do fato de com que precisão eles podem armazenar os números.
Por exemplo: eu tenho que armazenar 123.456789 Um pode ser capaz de armazenar apenas 123.4567 enquanto outro pode ser capaz de armazenar exatamente 123.456789.
Então, basicamente, queremos saber com que precisão o número pode ser armazenado e é o que chamamos de precisão.
Citando @Alessandro aqui
A precisão indica o número de dígitos decimais que estão corretos, ou seja, sem qualquer tipo de erro de representação ou aproximação. Em outras palavras, indica quantos dígitos decimais podem ser usados com segurança.
O flutuador pode armazenar com precisão de 7 a 8 dígitos na parte fracionária, enquanto o Double pode armazenar com precisão de 15 a 16 dígitos na parte fracionária
Portanto, o dobro pode armazenar o dobro da quantidade de parte fracionária e do flutuador. É por isso que Double é chamado de double the float
fonte
De acordo com a IEEE754 • Padrão para armazenamento de ponto flutuante • Padrões de 32 e 64 bits (precisão única e precisão dupla) • Expoente de 8 e 11 bits, respectivamente • Formatos estendidos (mantissa e expoente) para resultados intermediários
fonte
O número de precisão único usa 32 bits, com o MSB sendo bit de sinal, enquanto o número de precisão dupla usa 64 bits, o MSB sendo o bit de sinal
Única precisão
SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)
Dupla precisão:
SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)
fonte