2. Explicando o nome: “ponto flutuante”
1º
Em línguas de origem anglo-saxônica
o separador decimal é o ponto (e não a
vírgula como nas de origem latina).
2º
...
0002374.0 x 10-2
000237.40 x 10-1
00023.740 x 10-0
23.74 = 0002.3740 x 10+1
00.237400 x 10+2
0.0237400 x 10+3
...
3. Representação de ponto flutuante
normalizada
Dada a representação decimal de um número real
y = GyN yN-1 ... y2 y1 y0 . y-1 y-2 ... yk ...
na qual o dígito mais significativo yN é não-nulo,
existe um, e apenas um, expoente exp para o qual
y =G yN . yN-1 ... yk ... x 10exp.
Tal representação é dita normalizada.
...
0002374.0 x 10-2
000237.40 x 10-1
00023.740 x 10-0
23.74 = 0002.3740 x 10+1
00.237400 x 10+2
0.0237400 x 10+3
...
4. Campos para a representação decimal
de ponto flutuante normalizada
Para estabelecer de forma única a
representação decimal de ponto flutuante
normalizada de um número real
y = Gy0 . y1 ... yk ... x 10exp
basta definir:
• o sinal (+ ou -) de y;
• a fração (y0 . y1 ... yk ...) de y;
• o expoente (exp) de y.
Note bem que, na base 10, a normalização
exige:
0 < y0 < 10.
5. Representação binária de
ponto flutuante normalizada
A representação binária de ponto flutuante
normalizada de um número real y é dada por
y = Gy0 . y1 ... yk ... x 2exp,
onde yk 2 {0,1} para k 2 ;
Lembre-se: bit é abreviação para binary digit:
0 ou 1.
Note bem que, na base 2, a normalização exige:
0 < y0 < 2, isto é, y0 = 1.
Portanto, qualquer que seja y, y0 = 1.
O hiden bit Assim, não há necessidade de representar
explicitamente o bit mais significativo.
Então ele passa a ser um bit “escondido”.
6. Números reais
A distinção fundamental entre o conjunto dos
números reais e o conjunto dos números
racionais é o Axioma do supremo:
“Todo conjunto limitado superiormente de
números reais possui um supremo”.
A partir desse axioma, constrói-se a
representação decimal com infinitos dígitos de
números irracionais, como e, π, d2, etc.
Em última análise, dado o fator
exponencial de ajuste, tais representações são
séries convergentes de frações decimais.
7. A finitude do computador digital
A finitude de memória do computador digital
obriga, de fato, à utilização de representações
finitas de cadeias de 0’s e 1’s – os bits.
Tanto na fração como no expoente!
Nos computadores digitais:
Séries Somas
convergentes finitas
Expoentes restritos a uma faixa
8. O padrão IEEE 754/2008
É o padrão adotado atualmente para a
representação de ponto flutuante nas
implementações tanto de software
como de hardware.
• Formatos aritméticos;
• Formatos para intercâmbio
• Algoritmos para arredondamento;
• Operações algébricas
• Manipulação de exceções
9. O IEEE 754 / 2008
Os formatos binários adotados no padrão IEEE 754/2008
são definidos por uma terna ( s, e, f ) cujos valores definem
a quantidade de bits para cada campo da representação
binária de ponto flutuante normalizada do número:
• s campo do sinal;
• e campo do expoente;
• f campo da fração (ou mantissa).
Single: (1,8,23)
Double: (1,11,52)
Acrescente o bit
Quad: (1,15,112)
escondido na fração!
10. Representação binária
A representação binária de um número X é
armazenada em três campos:
Sinal de Fração de
X Expoente de X
X
11. Padrão IEEE 754/2008 - Single
4 bytes
1 bit para o 8 bits para o 23 bits para a
sinal expoente fração
12. Padrão IEEE 754/2008 - Single
s e f
(-1)s#2e-127#(1.f) se 0<e<255
(-1)s#2-126#(0.f) se e=0 e fs0
X= (-1)s#0 se e=0 e f=0
(-1)s#Inf se e=255 e f=0
NaN se e=255 e fs0
13. Padrão IEEE 754/2008 - Single
s e f
O sinal s é 0 quando o número é positivo e 1 quando é negativo
O expoente e é uma sequência de 8 bits, armazenada em complemento
a dois, com o desvio (bias) 011111112 = 12710
A fração f é uma sequência de 23 bits, f = f1f2...f23,
com fk 2 {0,1} para 1%k%23 e o seu valor é dado pela
fração decimal f = f1#2-1+f2#2-2...f23#2-23
18. Python v2.7
The Python Standard Library
Chap. 9 - Numeric and Mathematical Modules
19. A “reta real” no computador
Faixas
positiva e negativa
dos desnormalizados
−∞ +∞
Faixa normal Faixa normal
negativa positiva
Faixa dos Faixa dos
NaN NaN
negat. posit.
21. Algoritmo de conversão
1. Faça k=0, defina x2k = 0. e x10k = x10;
2. Multiplique x10k por 2 gerando y10k;
3. Denote por v2k o “vai 0” ou “vai 1” do resultado y10k;
4. Substitua k por k+1;
5. Defina o novo x10k suprimindo v2k do y10k anterior (quando v2k=0 isto
é desnecessário) ;
6. Defina o novo x2k acrescentando v2k à representação anterior x2k;
7. Se o novo x10k = 0 acabou; a representação na base dois foi obtida. Senão
retorne ao passo 2.
22. Gerando “bí”zimas periódicas
Para números racionais
– que é o caso dos números passíveis de representação em ponto flutuante –
o algoritmo de conversão descrito na transparência anterior
só termina em um número finito de passos
quando a representação x10 de x(0<x<1) na base 10
é uma potência (negativa) de dois
ou uma soma de potências (negativas) de dois.
23. Decimais com 1 dígito após a vírgula
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
80%
24. Decimais com 2 dígitos após a vírgula
0.00
0.01
...
0.24
0.25
0.26
...
0.49
0.50
0.51
...
0.74
0.75
0.76
...
96%
0.99
30. A adição
+ : (x,y) / x+y
1. Possui elemento neutro : o zero;
2. Cada x possui seu inverso –x;
3. É comutativa;
4. Não é associativa.
31. A multiplicação
* : (x,y) / x*y
1. Possui elemento neutro : o um;
2. Cada xs0 possui seu inverso: 1/x - não!
3. É comutativa – sim!
4. É associativa – não!