Python 05 - Ponto flutuante

3.406 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
3.406
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
40
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Python 05 - Ponto flutuante

  1. 1. Ponto flutuante LNCC UFRJ
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  14. 14. Padrão IEEE 754/2008 – Expoentes positivos Os hifens são facilitadores da leitura 0000-0010  22 2 0000-0001  12 --------- --------- 1 0000-0010  2C2 0000-0001  1C2 0111-1111  + bias 0111-1111  + bias --------- --------- 1000-0001  memória 1000-0000  memória 0111-1111  1272 --------- 127 0111-1111  127C2 0111-1111  + bias --------- 1111-1110  memória
  15. 15. Padrão IEEE 754/2008 – Expoentes negativos 0000-0001  1 1111-1110  -1C1 -1 0000-0011  3 1111-1100  -3C1 -3 0000-0001  +1 --------- 0000-0001  +1 1111-1111  -1C2 --------- 0111-1111  +bias 1111-1101  -3C2 --------- 0111-1111  +bias 0111-1110  memória --------- 0111-1100  memória 0111-1110  126 -126 1000-0001  -126C1 0000-0001  +1 --------- 1000-0010  -126C2 0111-1111  +bias --------- 0000-0001  memória
  16. 16. Padrão IEEE 754/2008 – Expoentes extremos 1000-0000  1282 0000-0000  02 --------- 128 --------- 0 1000-0000  128C2 0000-0000  0C2 0111-1111  +bias 0111-1111  +bias --------- --------- 1111-1111  memória 0111-1111  memória 0000-0000  0 0111-1111  127 1111-1111  -0C1 -0 1000-0000  -127C1 -127 0000-0001  +1 0000-0001  +1 --------- --------- 0000-0000  -0C2 1000-0001  -127C2 0111-1111  +bias 0111-1111  +bias --------- --------- 0111-1111  memória 0000-0000  memória
  17. 17. Padrão IEEE 754/2008 – a ordenação dos expoentes -127  0000-0000 Desnormalização -126  0000-0001 ... Base 10 -2  0111-1101 -1  0111-1110 -0  0111-1111 Faixa normal +0  0111-1111 +1  1000-0000 +2  1000-0001 ... +127  1111-1110 +128  1111-1111 Excessão
  18. 18. Python v2.7 The Python Standard Library Chap. 9 - Numeric and Mathematical Modules
  19. 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.
  20. 20. Problemas na conversão base 10  base 2
  21. 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. 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. 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. 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
  25. 25. Repetir a idéia
  26. 26. A grande maioria é “bí”zima 0.00 0.000 0.0000000 0.01 0.001 0.0000001 0.0 ... ... ... 0.1 0.24 0.124 0.xxxxxxx 0.2 0.25 0.125 0.xxxxxxx 0.3 0.26 0.126 0.xxxxxxx 0.4 ... ... ... 0.5 0.49 0.499 0.4999999 0.6 0.50 0.500 0.5000000 0.7 0.51 0.501 0.5000001 0.8 80% ... 96% ... 99.2% ... 99.9936% 0.9 0.74 0.874 0.xxxxxxx 0.75 0.875 0.xxxxxxx 0.76 0.876 0.xxxxxxx ... ... ... 0.99 0.999 0.9999999
  27. 27. A avaliação de funções
  28. 28. O que é realmente calculado... x y f y* = f(x*) x* x f Y = f(x)
  29. 29. Operações algébricas em ponto flutuante
  30. 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. 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!

×