Pontos Flutuantes
Flutuante
Números Fracionários em repr.2 binária i 2i–1
4
2
1
bi bi–1
•••
b2 b1 b0 . b–1 b–2 b–3
1/2
1/4
1/8
•••
b–j
•••
•••
2–j
– Bits à direita do “ponto binário” representam potências de 2 fracionárias i k – O número racional é representado como:
∑ bk ⋅2
k =− j
1
Exemplos
• Número
5 + 3/4
2 + 7/8
63/64
Representação
101.112
10.1112
0.1111112
• Observações
–Divisão por 2: shift right
– Multiplicação por 2: shift left
–Números da forma 0.111111…2 estão próximos de 1.0
• 1/2 + 1/4 + 1/8 + … + 1/2i + … → 1.0
–Esta representação tem limitações
Limitação
• É possível representar exatamente apenas números racionais que tenham parte fracionária da forma:
0
• Exemplos
∑ bk ⋅ 2 k
Número
Representação k =− j
1/8 (= 0.125)
1/16 (= 0.0625)
5.625
0.0012
0.00112
101.1012
• Outros números possuem sequências de bits repetidas indefinidamente a representação binária não é precisa
• Exemplos:
Número
Representação
1/3
1/5
1/10
0.0101010101[01]…2
0.001100110011[0011]…2
0.0001100110011[0011]…2
• Um problema desta representação: números muito grandes ou muito pequenos necessitariam de uma sequência muito longa de bits…
2
Representação IEEE
• As mais diversas representações de ponto flutuante já foram propostas, mas …
• O padrão IEEE 754 atualmente é o mais utilizado: – Criado em 1985 como padrão para representação e aritmética em ponto flutuante
– Implementado na grande maioria das CPUs
• Define três precisões:
– Single precision (float)
32 bits (precisão 24 bits)
– Double precision (double) 64 bits (precisão 53 bits)
– Double extended precision 80 bits (precisão 63 bits)
Obs: esta última somente em arquiteturas Intel-like
Padrão IEEE 754
• Forma numérica
(–1)s M 2E
• Bit de sinal s determina se número é negativo ou positivo • Mantissa M é um valor fracionário no intervalo
[1.0,2.0), na representação normalizada.