Você está na página 1de 8

Organização e Arquitetura de Computadores

Aula 11 – Ponto Flutuante


Parte II

2002
Juliana F. Camapum Wanderley
http://www.cic.unb.br/docentes/juliana/cursos/oac

OAC – Ponto Flutuante – Parte II - 1 Juliana F Camapum Wanderley

Revisão
„ PF aproximam valores que queremos utilizar.
„ Padrão IEEE 754 para PF é uma tentativa de
padronização amplamente aceita de tais números.
„ Novos registradores MIPS ($f0-$f31), e instruções:
„ Precisão Simples (32 bits, 2x10-38… 2x1038): add.s, sub.s,
mul.s, div.s
„ Precisão Dupla (64 bits , 2x10-308…2x10308): add.d, sub.d,
mul.d, div.d

„ Tipo não está associado com dados; bits não têm


significado a exceto em um dado contexto.
OAC – Ponto Flutuante – Parte II - 2 Juliana F Camapum Wanderley

1
Panorama

„ Números Ponto Flutuante Especiais: NaN,


Não-normalizados

„ Modos de arredondamento IEEE

„ Falácias de Ponto Flutuante, hacks

OAC – Ponto Flutuante – Parte II - 3 Juliana F Camapum Wanderley

Números Especiais

„ O que temos definido até agora?


„ (Precisão Simples)

Expoente Significando Objeto


0 0 0
0 nonzero ???
1-254 qq coisa +/- fl. pt. #
255 0 +/- infinito
255 nonzero ???

OAC – Ponto Flutuante – Parte II - 4 Juliana F Camapum Wanderley

2
Representação para Not a Number
„ Qual o resultado do cálculo: sqrt(-4.0) ou 0/0?
„ Se infinito não é um erro, estes não deveriam ser também.

„ Chamados Not a Number (NaN)

„ Expoente = 255, Significando nonzero

„ Por que isto é útil?


„ Esperamos que NaNs ajude na depuração?

„ Eles se propagam: op(NaN,X) = NaN

„ Tudo bem se calculamos mas não usamos

„ Pergunte aos matemáticos


OAC – Ponto Flutuante – Parte II - 5 Juliana F Camapum Wanderley

Números Especiais (cont.)

„ O que temos definido até agora?


„ (Precisão Simples)

Expoente Significando Objeto


0 0 0
0 nonzero ???
1-254 qq coisa +/- fl. pt. #
255 0 +/- infinito
255 nonzero NaN

OAC – Ponto Flutuante – Parte II - 6 Juliana F Camapum Wanderley

3
Representação para Não-Normalizados (1/2)

„ Problema: Existe um gap entre os números PF


representáveis perto de 0.
„ O menor número positivo representável:
a = 1.0… 2 * 2-127 = 2-127

„ Segundo menor número positivo representável:


b = 1.000……1 2 * 2-127 = 2-127 + 2-150

„ a - 0 = 2-127
Gap! Gap!
b - a = 2-150 b
„
- +
0 a
OAC – Ponto Flutuante – Parte II - 7 Juliana F Camapum Wanderley

Representação para Não-Normalizados (2/2)


„ Solução:
„ Nós ainda não utilizamos o Expoente=0,
Significando não zero.
„ Número não normalizado: sem o 1 da frente.
„ Menor número positivo representável:
„ a = 2-150
„ Segundo menor número positivo representável:
„ b = 2-149
- +
0
OAC – Ponto Flutuante – Parte II - 8 Juliana F Camapum Wanderley

4
Arredondamento
„ Quando se realiza cálculos matemáticos com números
reais, temos de nos preocupar com arredondamento.

„ O sistema real de cálculos matemáticos tem dois bits


de precisão extras, e então arredonda para se ter o
valor apropriado.

„ Arredondamento também ocorre quando se converte


um valor de precisão dupla para um de precisão
simples, ou na conversão de um PF para um inteiro.

OAC – Ponto Flutuante – Parte II - 9 Juliana F Camapum Wanderley

Modos de Arredondamento do IEEE


„ Arredonda para +infinito
„ SEMPRE arredonda para "cima": 2.001 -> 3
„ -2.001 -> -2
„ Arredonda para -infinito
„ SEMPRE arredonda para "baixo": 1.999 -> 1,
„ -1.999 -> -2
„ Trunca
„ Simplesmente descarta os últimos bits (arredonda para 0)
„ Arredonda para o par (mais próximo)
„ Arredondamento Normal, quase
OAC – Ponto Flutuante – Parte II - 10 Juliana F Camapum Wanderley

5
Arredonda para o par
„ Arredonde como você aprendeu na escola.
„ Exceto se o valor está exatamente na divisa, neste caso
arredondamos para o número PAR mais próximo.
„ 2.5 -> 2
„ 3.5 -> 4

„ Assegura consistência em cálculos.


„ Deste modo, metade das vezes arredondamos para cima e
na outra metade, para baixo.
„ Verifique com especialistas em estatística.

„ Este é o modo padrão de arredondamento.


OAC – Ponto Flutuante – Parte II - 11 Juliana F Camapum Wanderley

Forçando floats em ints e vice versa


„ (int) exp
„ Força e converte para o inteiro mais próximo.
„ afetado pelos modos de arredondamento.
„ i = (int) (3.14159 * f);

„ (float) exp
„ converte inteiro para o float mais próximo.
„ f = f + (float) i;

OAC – Ponto Flutuante – Parte II - 12 Juliana F Camapum Wanderley

6
int -> float -> int
if (i == (int)((float) i)) {
printf(true);
}
„ Não vai funcionar sempre

„ Valores inteiros grandes não têm uma representação PF


exata.

„ Do mesmo modo, pode-se arredondar para o valor


errado.

OAC – Ponto Flutuante – Parte II - 13 Juliana F Camapum Wanderley

float -> int -> float


if (f == (float)((int) f)) {
printf(true);
}

„ Não vai funcionar sempre

„ Valores pequenos de PF não têm boa representação


inteira.

„ Também erros de arredondamento

OAC – Ponto Flutuante – Parte II - 14 Juliana F Camapum Wanderley

7
Falácias em Ponto Flutuante
„ Soma e Subtração PF são associativas: FALSO!
„ x = – 1.5 x 1038, y = 1.5 x 1038, e z = 1.0
„ x + (y + z) = –1.5x1038 + (1.5x1038 + 1.0)= –1.5x1038 +
(1.5x1038) = 0.0
„ (x + y) + z = (–1.5x1038 + 1.5x1038) + 1.0= (0.0) + 1.0 =
1.0

„ Portanto, soma e subtração PF não são associativas!


„ Por que? resultado PF aproxima o resultado real!
„ Neste exemplo: 1.5 x 1038 é tão maior que 1.0 que na
representação PF 1.5 x 1038 + 1.0 ainda é 1.5 x 1038
OAC – Ponto Flutuante – Parte II - 15 Juliana F Camapum Wanderley

Coisas para se Lembrar

„ Padrão IEEE 754 para Ponto Flutuante: tenta acomodar o


máximo que se pode com:
„ +/- infinito, Not-a-Number (Nan), Não-Normalizados
„ 4 modos de arredondamento

„ Conceito de Programa Armazenado: Tanto dados como o


código (instruções) são armazenados na mesma memória.
„ Tipo não está associado com dados, os bits não têm
nenhum significado intrínseco, somente no contexto em
que são manipulados.

OAC – Ponto Flutuante – Parte II - 16 Juliana F Camapum Wanderley

Você também pode gostar