Pergunta

Um duplo (de um determinado número de bytes, com um equilíbrio razoável de Mantissa/Expoente) sempre com precisão com precisão o intervalo de um número inteiro não assinado da metade desse número de bytes?

Por exemplo, um duplo de oito bytes pode manter totalmente com precisão o intervalo de números de um Int de quatro bytes não assinado?

O que isso vai se resumir é se um bytes de dois bytes puder manter o alcance de um byte não assinado int.

É claro que um byte não assinado será 0 -> 255.

Foi útil?

Solução

Um duplo IEEE754 de 64 bits pode representar qualquer número inteiro de 32 bits, simplesmente porque possui 53-odd(uma) Bits disponíveis para precisão e o número inteiro de 32 bits só precisa, bem, 32 :-)

Seria plausível para um número flutuante (não IEEE754 de precisão dupla) de 64 bits para ter menos de 32 bits de precisão. Isso permitiria números realmente grandes (devido ao expoente), mas ao custo da precisão.

A linha inferior é que, desde que haja mais bits de precisão no Mantissa do número do ponto flutuante do que no número inteiro (e bits suficientes no expoente para escalá -lo), pode ser representado sem perda de precisão.


(uma) Tecnicamente, o 53º bit de precisão está implícito 1 No início da sequência, a quantidade de "variável" pode ser apenas 52 bits. Sejam 52 ou 53, ainda são bits suficientes para representar cada número inteiro de 32 bits.

Outras dicas

Sim. Um flutuador (ou duplo) é garantido para representar exatamente qualquer número inteiro que não precise ser truncado. Para um dobro, há 53 bits de precisão, o que é mais do que suficiente para representar exatamente qualquer número inteiro de 32 bits e uma pequena proporção (estatisticamente falando) de 64 bits também.

Exactly what the range is that you can represent exactly depends on a lot of factors in your implementation, but you can lower-bound it by saying that, if the exponent field is set to 0, you can exactly represent integers up to the width of your mantissa field (assuming a sign bit). For IEEE 754 double-precision, this means you can represent 52-bit numbers exactly. In general, your mantissa will be over half the width of the overall structure.

For more details on how a double works, you might want to look at this blog post: Anatomy of a floating point number.

I wouldn't use the words "fully precisely" when talking about floating-point numbers. But yes, a double can represent a 32-bit integer.

I do not know which other combinations of floats and ints that this is also true for.

Practically speaking, you don't want to bother using floating point above what your machine supports, so just switch to rational arithmetic with bignums. That way, you're guaranteed precision.

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