Representação em ponto flutuante

Formato IEEE 754 para ponto flutuante

|31|30|29|28|27|26|25|24|23|22|21|....................|0|
|-------------------------------------------------------|
|S |Expoente               | Mantissa                   |
|-------------------------------------------------------|
 1    8                       23
 bit  bits                    bits
N=(-1)Sx(1+M)x2E=(-1)S x (1,M)x2E
Precisão simples: 8 bits para expoente e 23 para mantissa
Precisão dupla: 11 bits para expoente e 52 bits para mantissa
Representação em ponto flutuante para expoente, temos 8 bits, o excesso pode ser 27 ou 27-1.
Escolheram o segundo que é 127 para precisão simples e 1023 para precisão dupla.
Exemplo de precisão dupla:
-0,75=-0,112=-1,12x 2-1
N=-1,12 x 2-1
N=(-1)S x (1+M)x 2(E-1023)=
(-1)1 x (1+0,10000000000000000000000)x 2(1022-1023)
1011111111101000000000000000000000000000000000000000000000000000

C0A00000C0A00000 representa que número em ponto flutunate ?
1100 0000 1010 0000 0000 0000 0000 0000 1100 0000 1010 0000 0000 0000 0000 0000
Sinal = -1
Expoente=E-1023=1034-1023=+11
Mantisssa=0000000000000000000011000000101000000000000000000000
N=-1,00000000000000000000110000001012x2+11
  • Casos especiais: Menor denormalizado, 0,000000000000000000000012x2-126=1,02x2-149
    Maior denormalizado, 0,111111111111111111111112x2-126
    Menor número normalizado, 1 para expoente e 0 para mantissa, 1,02x2-126 = 10 -38

    Maior número normalizado, bits do expoente todos em 1, com exceção do bit menos significativo, logo e= 254-127=+127, e mantissa toda com 1s, 1,1111..12x2127=1038

    Valores para o padrão IEEE 754


    Sinal Expoente Mantissa Valor do número
    0 0000....0000 0000....0000 +0
    0 0000....0000 0000....0001
    1111....1111
    0,M x 2-126
    0 0000....0001
    1111....1110
    XXXX....XXXX 1,XXXX....XXXX x 2(e-b)
    0 1111....1111 0000....0000 + infinito
    0 1111....1111 0000....0001
    1111....1111
    NaN
    1 0000....0000 0000....0000 -0
    1 0000....0000 0000....0001
    1111....1111
    -0,M x 2-126
    1 0000....0001
    1111....1110
    XXXX....XXXX -1,XXXX....XXXX x 2(e-b)
    1 1111....1111 0000....0000 - infinito
    1 1111....1111 0000....0001
    1111....1111
    NaN

    Soma em ponto flutuante

    Somar 9,999x101 com 1,610x10-1.
    Suponha que pode-se utilizar 4 dígitos para o número e 2 dígitos para expoente.
    1. Alinha o ponto decimal do número que tem o menor expoente para igualar ao expoente do número que tem maior expoente.
      1,610x10-1=0,1610x100=0,016x101(só pode usar 4 dígitos)

      Porque alinha menor com maior ? Pode perder digitos, então melhor perder dígitos menos significativos. Maior chance de resultado ser normalizado.
      1.101 x 2-3,  
      1.001001 x 26
                .000000000001101 x 26 
               1.001001          x 26 
              ------------------
               1.001001000001101 x 26
      
    2. Soma as mantissas
       9,999
       0,016
      --------
      10,015x101
      
    3. Coloca em notação científica normalizada
      10,015x101=1,0015x102
    4. Ajusta para número de dígitos possível com arredondamento
      1,0015x102=1,002x102
    5. Verifica se houve overflow ou underflow (expoente maior ou menor do que é possível ser representado)
    Exemplo de adição de números em ponto flutuante em binário:

    Assumir 4 dígitos para número e 2 dígitos para expoente
    Somar 0,510 com -0,437510
    1. Converte para a base 2.
      0,5=0,1x20=1,000x2-1
      -0,4375=-0,01110x20=-1,110x2-2
    2. Desloca para a direita o número com menor expoente. O número de deslocamentos é igual a diferença entre os expoentes. Se os expoentes são iguais, não há deslocamento.
      -1,110x2-2=-0,1110x2-1=-0,111x2-1
    3. Soma os números
      1,000x2-1+(-0,111x2-1)=0,001x2-1
    4. Normaliza a soma se necessário
      (ex. resultado igual a 10.__ ou 11.__ deverá sofrer um deslocamento para a direita e um incremento no expoente. Podemos tambem ter um resultado de 0.____ se somarmos um número positivo com negativo. Deverá sofrer um deslocamento para a esquerda e um decremento do expoente.
      0,001x2-1=0,010x2-2=0.100x2-3=1,000x2-4
    5. Para padrão IEEE 754 precisão simples, ocorre overflow se expoente maior que 127 ou underflow se expoente menor que -126 então será gerada uma exceção
    6. Trunca resultado para número de bits que pode ser utilizado.
      1,000x2-4.