Articles

números de vírgula flutuante

por que os números de vírgula flutuante são necessários

Uma vez que a memória do computador é limitada, não poderá armazenar números com precisão infinita, independentemente de usar fracções binárias ou decimais: em algum ponto terá de cortar. Mas quanta precisão é necessária? E onde é necessário? Quantos dígitos inteiros e quantos dígitos fraccionários?para um engenheiro que constrói uma auto-estrada, não importa se são 10 ou 10 metros.0001 metros de largura-suas medições provavelmente não são tão precisas em primeiro lugar.

  • para alguém projetando um microchip, 0,0001 metros (um décimo de um milímetro) é uma grande diferença – mas eles nunca terão que lidar com uma distância maior do que 0,1 metros.
  • Um físico precisa usar a velocidade da luz (cerca de 300000000) e a constante gravitacional de Newton (cerca de 0.0000000000667) juntos no mesmo cálculo.
  • para satisfazer o engenheiro e o designer de chip, um formato de número tem que fornecer precisão para números em magnitudes muito diferentes. No entanto, é necessária apenas precisão relativa. Para satisfazer o físico, deve ser possível fazer cálculos que envolvam números com diferentes magnitudes.

    basicamente, ter um número fixo de dígitos inteiros e fraccionais não é útil – e a solução é um formato com um ponto flutuante.

    How floating-point numbers work

    The idea is to compose a number of two main parts:

    • a significand that contains the number’s digits. Os significados negativos representam números negativos.
    • um expoente que diz onde o ponto decimal (ou binário) é colocado em relação ao início do significado. Expoentes negativos representam números que são muito pequenos (ou seja, perto de zero).

    Como um formato satisfaz a todos os requisitos:

    • pode representar números muito diferentes magnitudes (limitado pelo comprimento do expoente)
    • fornece a mesma precis ao relativa em todas as magnitudes (limitado pelo comprimento do significand)
    • permite cálculos em magnitudes: a multiplicação de um número muito grande e muito pequeno preserva a precisão de ambos no resultado.

    números decimais de vírgula flutuante normalmente assumem a forma de notação científica com um ponto explícito sempre entre os 1.º e 2. º dígitos. O expoente é escrito explicitamente incluindo a base, ou um e é usado para separá-lo do significado.

    a norma

    quase todas as linguagens de hardware e programação usam números de vírgula flutuante nos mesmos formatos binários, que são definidos na norma IEEE 754. Os formatos usuais são 32 ou 64 bits no comprimento total:

    Format Total bits Significand bits Exponent bits Smallest number Largest number
    Single precision 32 23 + 1 sign 8 ca. 1.2 ⋅ 10-38 ca. 3.4 ⋅ 1038
    Double precision 64 52 + 1 sign 11 ca. 2.2 ⋅ 10-308 ca. 1.8 ⋅ 10308

    Note que existem algumas peculiaridades:

    • a sequência de bits real é o sinal bit primeiro, seguido pelo expoente e, finalmente, os significand bits.
    • o expoente não tem um sinal; em vez disso, um viés expoente é subtraído dele (127 para simples e 1023 para precisão dupla). Isto, e a sequência de bits, permite que números de ponto flutuante sejam comparados e ordenados corretamente, mesmo quando interpretando-os como inteiros.
    • o dígito mais significativo do significand é omitido e assume-se que seja 1, exceto para números subnormais que são marcados por um expoente all-0 e permitem uma gama de números além dos menores números indicados na tabela acima, ao custo de precisão.
    • existem valores separados positivos e negativos zero, diferindo no bit do sinal, onde todos os outros bits são 0. Estes devem ser considerados iguais, mesmo que seus padrões de bits são diferentes.
    • Existem valores infinitos especiais positivos e negativos, onde o expoente é todos 1-bits e o significado é todos 0-bits. Estes são os resultados dos cálculos em que o intervalo positivo do expoente é excedido, ou a divisão de um número regular por zero.
    • existem valores especiais não um número (ou NaN) onde o expoente é todos 1-bits e o significado não é todos 0-bits. Estes representam o resultado de vários cálculos indefinidos (como a multiplicação de 0 e infinito, qualquer cálculo envolvendo um valor NaN, ou casos específicos de Aplicação). Mesmo valores Nan bit-idênticos não devem ser considerados iguais.

    Se isto parecer demasiado abstracto e quiser ver como alguns valores específicos se parecem no IEE 754, tente o brinquedo flutuante, ou a visualização do IEEE 754, ou o flutuador exposto.