Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 OAC – Ponto Flutuante – Parte II - 1 Juliana F Camapum Wanderley 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 - 2 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. 2 OAC – Ponto Flutuante – Parte II - 3 Juliana F Camapum Wanderley 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 - 4 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 ??? 3 OAC – Ponto Flutuante – Parte II - 5 Juliana F Camapum Wanderley 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 - 6 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 4 OAC – Ponto Flutuante – Parte II - 7 Juliana F Camapum Wanderley 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 b - a = 2-150 b a0 +- Gap!Gap! OAC – Ponto Flutuante – Parte II - 8 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 +- 5 OAC – Ponto Flutuante – Parte II - 9 Juliana F Camapum Wanderley 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 - 10 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 6 OAC – Ponto Flutuante – Parte II - 11 Juliana F Camapum Wanderley 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 - 12 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; 7 OAC – Ponto Flutuante – Parte II - 13 Juliana F Camapum Wanderley int -> float -> int 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. if (i == (int)((float) i)) { printf(true); } OAC – Ponto Flutuante – Parte II - 14 Juliana F Camapum Wanderley float -> int -> float Não vai funcionar sempre Valores pequenos de PF não têm boa representação inteira. Também erros de arredondamento if (f == (float)((int) f)) { printf(true); } 8 OAC – Ponto Flutuante – Parte II - 15 Juliana F Camapum Wanderley 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 - 16 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.
Compartilhar