Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NumPy e o IEEE 754

Paulo Bordoni
November 12, 2013

NumPy e o IEEE 754

Sem comentários

Paulo Bordoni

November 12, 2013
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Auto-retrato Rembrandt H. van Rijn, Holandês, 15 /07/1606– 04/10/1669 A

    Casa de Maurício (de Nassau), na cidade de Haia, na Holanda É A Lição de Anatomia do Dr. Nicolaes Tulp, (1632) . Pintura a óleo de Rembrandt, no Museu Mauritshuis (Casa de Maurício)
  2. Moça com Brinco de Pérola, (1665-1666) Johannes Vermeer, Holandês, 31/10/1632

    – 15/12/1675 O filme é emocionante e a pintura ma-ra-vi-lho-sa. Vejam o olhar dela!
  3. Michelangelo Merisi da Caravaggio, Italiano, 29/09/1571 - 18/071610 Medusa, Pintura

    em madeira, 1596/7 Fui ao MASP, em São Paulo, ver a exposição de Caravaggio. A cabeça da Medusa, com as serpentes, é apavorante. Mas eu não petrifiquei!
  4. San Girolamo, Caravaggio, pintura a óleo sobre tela, com112 x

    157 cm, feita em 1605-1606. Atualmente na Galeria Borghese, Roma. Também vi no MASP. Observem a luz direcionando sua atenção ...
  5. http://masp.art.br/masp2010/ Na ida a São Paulo além do MASP, passeiem

    pela Av. Paulista e procurem as Livrarias. Ouçam a OSESP na Sala São Paulo, apreciem a arquitetura da Catedral da Sé. Almocem no Mercado Municipal, ...
  6. Vincent Van Gogh O escolar (O Filho do Carteiro –

    Gamin au Képi) Pierre-Auguste Renoir Rosa e Azul (As Meninas Cahen d´Anvers) Uma amostra do MASP...
  7. Não. Não é por aí ... O código empregado atualmente

    é o UNICODE. Parte dele é o UTF8, que inclui o ASCII de 7 bits. Como o Código da Vinci?
  8. No teclado estão os caracteres, símbolos que o ser humano

    entende. Os significados são cadeias de bits (0’s e 1’s), que o processador entende. Essas codificações são como dicionários: uma lista de símbolos, cada um com seu significado.
  9. Ao pressionar uma tecla fecha-se o circuito e é transmitido

    um sinal elétrico para um chip, que o transforma em UNICODE. Teclado: 3 folhas de laminado plástico. Duas com circuitos impressos. A 3ª isola essas duas e possui furos sob cada tecla Numa “fios” direção; na outra os fios são transversais
  10. Fiquei meio perdida com tanta informação. O que eu preciso

    saber de fato? Sherlock, resuma como as coisas se processam de forma transparente para nós, os usuários.
  11. 1. O usuário digita um numeral (inteiro ou real) pelo

    teclado que é recebido pelo chip (lá no canto superior direito); 2. O chip codifica os símbolos digitados para UNICODE e os envia sequencialmente para o processador; 3. O processador e/ou a PVM (Python Virtual Machine) recebem essa cadeia UNICODE e a transforma em um número computável. Vamos entender como.
  12. Vamos focar nos números reais. Com os inteiros tudo é

    mais simples. Vamos começar pela representação decimal de um número real:
  13. Os elementos de D são os dígitos, ⋯ 1 0

    é a parte inteira de y e 1 ⋯ ⋯ a parte fracionária de y. Qualquer número ∈ ℝ pode ser representado na forma decimal = ± ⋯ 1 0 . 1 ⋯ ⋯, com , ∈ = 0,1,2, ⋯ , 9 . Sabemos que:
  14. ⋯ 1 0 = = 10 + ⋯ + 1

    101 + 0 100 = 10 =0 Lembrem-se, trata-se de uma taquigrafia. A parte inteira de y é uma soma:
  15. 0. 1 ⋯ ⋯ = = 1 /101+ ⋯ +

    /10 + ⋯ = lim →∞ 10− =1 = lim →∞ 10− =1 Já a parte fracionária não é, necessariamente, uma soma. Trata-se de uma série - o limite de uma sequência de somas parciais:
  16. Em outras palavras, os ... ao final de = ±

    ⋯ 1 0 . 1 ⋯ ⋯ escondem um Curso de Cálculo! Ahá !!!!! Sempre desconfiei que havia gato na tuba ...
  17. Para unicidade da representação = ± ⋯ 1 0 .

    1 ⋯ ⋯, na parte fracionária são proibidas cadeias infinitas de 9’s, tipo 2.425999 … Ah, eu aprendi a somar PGs no 2º grau: 0.000999 … = 0.001.
  18. Bem, cientistas e engenheiros perceberam que seria vantajoso escrever números

    sob a forma de ponto flutuante: = 0 . 1 ⋯ ⋯ ∗ 10
  19. x x x x x x Na base 10, multiplicar

    por uma potência de 10 resulta em deslocar (flutuar) o separador decimal ao longo da representação decimal do número. Look at the floating point Ponto-flutuante porquê:
  20. 23.74 , 0.001, 3,141592, 1.4142135623730951 Sim! Quero ver você escrever

    a constante de Avogadro, 6.02214179(30)×1023 mol-1 em ponto-fixo! Mas a notação de ponto-fixo é mais fácil!
  21. Qualquer número real y ≠ 0 pode ser representado de

    forma única como = 0 . 1 ⋯ ⋯ ∗ 10 y 0 ≠ 0 É a normalização. Detalhe: se 0 ≠ 0 essa representação é única!
  22. No sistema métrico decimal o fator de escala é 10:

    • 1 m = 100 cm = 1.000 mm • 1 km = 1.000 m Assim: • 3 m = 3∗102 cm = 3∗103 mm • 5,2 km = 5,2∗103 m = 5,2 ∗106 mm
  23. = 0 . 1 ⋯ ∗ 10, com 0 <

    0 < 10. Sem os ... O ponto em questão é que nas réguas, e na prática, os ... são impossíveis! Somos forçados a trabalhar com representações finitas!
  24. y = ± y 0 . y 1 ... y

    k ∗ 10 exp Sinal Expoente Fração Fator de escala As quatro características fundamentais: Realmente trabalharemos com uma fração (número racional), pois o número de casas decimais é finito.
  25. = ±0 . 1 ⋯ ∗ 2 Fração Expoente Sinal

    Fator de escala No computador as quatro características fundamentais permanecem: A diferença é que a fração e o expoente serão números binários. E o fator de escala será 2.
  26. Iniciei esta aula apresentando belíssimas obras de arte, talvez para

    amenizar uma péssima notícia. Mas não há como, Mestre. E a notícia é cruel: Não existem números reais nos computadores!
  27. É verdade meus jovens, estamos limitados a trabalhar com números

    racionais (frações) nos computadores. É bem pior que isto, professor, apenas com uma parte, um subconjunto finito dos racionais!
  28. Séries numéricas convergentes Somas finitas Nos computadores digitais: Expoentes restritos

    a uma faixa Frações de tamanho finito Representações finitas de cadeias de 0’s e 1’s, os bits. Tanto na fração como no expoente! É a finitude no computador digital
  29. Senhores algo fede no Reino da Dinamarca (e na Câmara

    de vereadores do Rio). O computador - maior instrumento tecnológico da humanidade - obriga-nos a um retorno aos Pitagóricos. Lembrem-se, na Escola de Pitágoras só eram permitidas as frações, os incomensuráveis eram proibidos e, diz a lenda, eles mataram por isso.
  30. A escolha da pintura A Lição de Anatomia do Dr.

    Nicolaes Tulp para abertura desta lição não é por acaso. É uma indicação artística de que, agora, passaremos a dissecar a representação IEEE 754/2008 em Python/NumPy.
  31. O IEEE 754/2008 é o padrão adotado atualmente para a

    representação computacional de ponto flutuante nas implementações tanto de software como de hardware. Vamos ao padrão IEEE 754/2008. Então vá vestir um smoking!
  32. • Formatos aritméticos; • Formatos para intercâmbio • Algoritmos para

    arredondamento; • Operações algébricas • Manipulação de exceções O padrão estabelece: Falta de respeito! Você deveria estar de smoking!
  33. Single: (1,8,23) Double: (1,11,52) Quad: (1,15,112) O padrão estabelece três

    formatos: Acrescente o bit escondido na fração! O padrã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 estabelecem 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).
  34. Sinal de X Expoente de X Fração de X A

    representação binária de um número X é armazenada em três campos: Representação padrão IEEE 754/2008
  35. Sim. A normalização exige que o primeiro bit da fração

    seja não-nulo. Ora, ≠ 0 ⇒ = 1. Assim, não há necessidade de representá-lo. Ganha-se um bit no armazenamento do nº. E ainda tem o “hiden” bit!
  36. 1 bit para o sinal 16 bytes 15 bits para

    o expoente 112 bits para a fração O padrão Quad
  37. 1 bit para o sinal 8 bytes 11 bits para

    o expoente 52 bits para a fração O padrão Double
  38. 1 bit para o sinal 4 bytes 8 bits para

    o expoente 23 bits para a fração O padrão Single
  39. s e f s = 0 se x > 0

    1 se x < 0 O campo do sinal nos 3 padrões: Single, Double e Quad:
  40. É armazenada uma sequência de 8 bits: o complemento a

    2 do número, somado com um desvio de 127 10 = 0111111 2 . s e f O campo do expoente no padrão Single
  41. s e f É armazenada uma sequência de 11 bits:

    o complemento a 2 do número, somado com um desvio de 1023 10 = 011.1111.1111 2 . 10 O campo do expoente no padrão Double
  42. Por exemplo, se o expoente é 3 (positivo) seu complemento

    a 2 é ele mesmo: 0000 0011. O que é armazenado em Single é 0000 0011 + 0111 1111 = 1000 0010. É o mesmo que converter 130 = 127+3, para a base 2. Já, se o expoente é -3, seu complemento a 2 é 1111 1101. Então em Single é armazenado 1111 1101 + 0111 1111 = 0111 1100. É o mesmo que converter 124 = 127 – 3 para a base 2 (que tem só 7 dígitos) e acrescentar um 0 na frente.
  43. s e f É armazenada uma sequência de 23 bits,

    f 1 f 2 ... f 23 , dada pela fração decimal f 1 ∗ 2-1 + f 2 ∗ 2-2 + ... + f 23 ∗ 2-23 obtida a partir de x. O campo da fração no padrão Single
  44. (-1)s ∗ 2e-127 ∗ (1.f) ..... se 0 < e

    < 255 (-1)s ∗ 2e-126 ∗ (0.f) .... se e = 0 e f ≠ 0 (-1)s ∗ 0 ....................... se e = 0 e f = 0 (-1)s ∗ Inf ................... se e = 255 e f = 0 NaN ............................ se e = 255 e f ≠ 0 x = s e f O padrão Single
  45. (-1)s ∗ 2e-1023 ∗ (1.f) .... se 0 < e

    < 2047 (-1)s ∗ 2e-1022 ∗ (0.f) ... se e = 0 e f ≠ 0 (-1)s ∗ 0 ....................... se e = 0 e f = 0 (-1)s ∗ Inf ................... se e = 2047 e f = 0 NaN ............................ se e = 2047 e f ≠ 0 x = s e f O padrão Double
  46. -127  0000-0000 -126  0000-0001 ... -2  0111-1101

    -1  0111-1110 -0  0111-1111 +0  0111-1111 +1  1000-0000 +2  1000-0001 ... +127  1111-1110 +128  1111-1111 Base 10 Faixa normal Excessão Desnormalização Padrão IEEE 754/2008. A ordenação dos expoentes em Single
  47. Faixa dos NaN negat. Faixas positiva e negativa dos de-normalizados

    Faixa normal negativa Faixa normal positiva Faixa dos NaN posit. +Inf -Inf Esta é a reta “real” nos computadores.
  48. No padrão IEEE 754/2008, existem 232 = 4.294.967.296 números Single.

    No padrão IEEE 754/2008, existem 264 = 18.446.744.073.709.551.616 números Double.
  49. Só para lembrar: É impossível contar os números da reta

    real, trata-se de um infinito contínuo!
  50. Indo direto ao ponto: o algoritmo para obtenção da representação

    na base 2 de um número entre 0 e 1, escrito na base 10, pode ser descrito por: Multiplique o número dado sucessivamente por 2 e vá coletando os “vai 0” ou “vai 1”. Algoritmo?
  51. Nesse exemplo eu mostro como converter 0.3 para a base

    2. 0.3 = 0. 0.3 ∗ 2 0.6 0 0.6 ∗ 2 1.2 1 0.2 ∗ 2 0.4 0 0.4 ∗ 2 0.8 0 0.8 ∗ 2 1.6 1 0.6 ∗ 2 1.2 1 1 0 0 . . .
  52. Em todos os outros casos, a representação na base 2,

    do número racional é uma seqüência periódica – uma “bí”zima periódica Para números racionais, o algoritmo de conversão descrito na transparência anterior só termina em um número finito de passos quando o número é uma potência (negativa) de 2 ou uma soma de potências (negativas) de 2. Gerando “bi”zimas periódicas.
  53. 80% dos números decimais com apenas 1 dígito após a

    vírgula geram dízimas periódicas na base 2 Construí um programa Python que recebe um número entre zero e um, escrito na base 10, com apenas uma casa decimal após a vírgula, e o converte para a base dois. 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
  54. 0.00 0.01 ... 0.24 0.25 0.26 ... 0.49 0.50 0.51

    ... 0.74 0.75 0.76 ... 0.99 Confira que 96% dos números decimais com apenas 2 dígito após a vírgula geram dízimas periódicas na base 2
  55. Repita isso para números com 3, 4, 5, 6, 7

    casas decimais após a vírgula ... Depois dê uma olhada na próxima transparência!
  56. Não minha Loirinha querida! É que no padrão Single, temos

    24 = 23 + 1 bits de precisão. Sete é algum número mágico Mestra?!
  57. É só responder à pergunta: “24 casas binárias correspondem a

    quantas casas decimais?” Em matemática: qual o valor de k para o qual: 10 = 224 Resolvendo a equação acima encontramos = 24 ∗ 10 2 = 24 ∗ 0.301030 = 7.224719 ≅ 7 Continuo não entendendo!
  58. 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

    80% 0.00 0.01 ... 0.24 0.25 0.26 ... 0.49 0.50 0.51 ... 0.74 0.75 0.76 ... 0.99 96% 0.000 0.001 ... 0.124 0.125 0.126 ... 0.499 0.500 0.501 ... 0.874 0.875 0.876 ... 0.999 99.2% 0.0000000 0.0000001 ... 0.xxxxxxx 0.xxxxxxx 0.xxxxxxx ... 0.4999999 0.5000000 0.5000001 ... 0.xxxxxxx 0.xxxxxxx 0.xxxxxxx ... 0.9999999 99.9936% A grande maioria é “bi”zima periódica. No padrão Single: 99,99 %.
  59. A consequência poderá ser funesta ao calcularmos valores de funções

    ... São apenas 274.877, de números corretos, do total de 4.294.967.296, no caso dos Single.
  60. Bem, meus jovens, vamos retornar aos números. Vamos construir um

    sistema numérico de brinquedo, fiel ao padrão IEEE 754/2008. Fala sério, Mestre!
  61. s e f Toy 1 64 números Toy 2 s

    e f 256 números Vamos construir um sistema Toy 1, com 6 bits e um Toy 2 com 8 bits: A única diferença é que o Toy 2 tem uma fração maior, com 4 bits!
  62. -3 000 -2 001 -1 010 0 011 1 100

    2 101 3 110 4 111 Faixa normal Exceção De-normalização e Toy 2 s e f s e f Toy 1 Em ambos, os expoentes possíveis são os 8 abaixo:
  63. s e f Toy 1 00 ....... 0.00 01 .......

    0.25 10 ....... 0.50 11 ....... 0.75 f No Toy 2, são 24 = 16 e no Single são 223 = 8.388.608 frações possíveis No Toy 1 as frações possíveis são as 22 = 4 abaixo:
  64. 0000 .... 0.0000 0001 .... 0.0625 0010 .... 0.1250 0011

    .... 0.1875 0100 .... 0.2500 0101 .... 0.3125 0110 .... 0.3750 0111 .... 0.4375 f Toy 2 s e f 1000 .... 0.5000 1001 .... 0.5625 1010 .... 0.6250 1011 .... 0.6875 1100 .... 0.7500 1101 .... 0.8125 1110 .... 0.8750 1111 .... 0.9375 f As frações doToy 2 são as 16 abaixo:
  65. 000...000  0.0000000 000...001  2-23 000...010  2-22 000...011

     2-23+2-22 .... 011...111  2-2+ ... +2-23 100...000  2-1 100...001  2-1+2-23 .... 111...111  2-1+ ... +2-23 f 23 bits Imagine só as 8.388.608 frações do Single:
  66. (-1)s ∗ 2e-3 ∗ (1.f) ..... se e = 1,2,3,4,5,6

    (-1)s ∗ 2e-2 ∗ (0.f) .... se e = 0 e f ≠ 0 (-1)s ∗ 0 .................... se e = 0 e f = 0 (-1)s ∗ Inf ................ se e = 7 e f = 0 NaN ......................... se e = 7 e f ≠ 0 x = Nos dois padrões Toy a regra de decodificação é quase a mesma. Isto pq. a condicional sobre o expoente é a mesma (eles são iguais!). A diferença reside só nas frações.
  67. Fiz um programa para mostrar os números do Toy 1.

    O Toy 2 ficará por conta de vocês. Vou fazer, Mestre!
  68. Na primeira linha da matriz os de-normalizados. Na última a

    faixa de exceções; o 16. corresponde ao +Inf e 20., 24. e 28. aos NaN. As 6 linhas internas são os nos. normais. E os negativos?
  69. Pô, Sherlock, lá embaixo está tudo sobreposto! Atenção! Os números

    do Toy-1 são apenas os marcados com bolinhas, na escala vertical.
  70. Vou quebrar esse gráfico em dois. Um de y =

    2. para baixo e outro de y = 2. para cima. Tem razão Surfista, é porque para cada grupo de 4 números de Toy 1 o fator de escala muda(*) numa potência de 2: 2-2, 2-2, 2-1, 20, 21, 23 e 24. (*) Exceto na transição dos de-normalizados para a 1ª faixa normal, em que é o mesmo.
  71. O programa que gera a parte inferior do gráfico. Até

    a linha 14 ele é igual ao Toy_1.py.
  72. Valeu, Mestre, inclusive vejo que a escala é a mesma

    para a menor faixa dos normais e a dos de-normalizados
  73. Imaginem se não houvesse sido criada a faixa de de-normalização.

    A distância do menor normal positivo m* à zero seria muito maior que a de m*, ao normal seguinte, causando uma enorme perda de precisão! m*
  74. No Single é a mesma coisa, só que ele é

    dado por 2−127 ∗ (1. ). Com = 1 = 00 … 00, obtemos 1 2126 ≅ 1.1754943508222875 ∗ 10−38 O menor normal positivo noToy 1 é dado por 2−3 ∗ (1. ). Com = 1 = 00, obtemos 1/22 = 0.25.
  75. O programa que gera a parte superior do gráfico do

    Toy 1. Até a linha 14 ele é igual ao Toy 1.py.
  76. Vejam: • o maior normal é 14. • +Inf corresponde

    a 16. • e os NaN a 20., 24. e 28. Show de bola, Mestre, vou fazer o Toy 2.
  77. Exatamente, +∞ ∉ ℝ. E o + faz o papel

    de +∞ no Toy 1 e em todos sistemas IEEE 754. Mestre, aprendi em Cálculo I que ±∞ não são números. Então, pq + = 16 ?
  78. Observe, por exemplo, no Toy 1, que: • 14. +12.

    = 26. > +, • 7.∗ 8. = 56. > +. Então, ao executar um programa, o sistema IEEE 754 informará que essas operações resultam em NaN teremos como evitar uma travada na sua execução! Mestre, então qual a razão dos NaN existirem ?
  79. No Single é a mesma coisa, só que ele é

    dado por 2−127 ∗ 1. . Com = 254 = 11 … 1, obtemos 2128 ∗ (1 + 1/2 + ⋯ + 223) = = 2128 ∗ (224 − 1)/223 = 2105 ∗ (224 − 1) ≅ 6.805646932770577 + 38 O maior normal no Toy 1 é dado por 2−3 ∗ (1. ). Com = 6 = 11 obtemos 23 ∗ (1 + 1/2 + 1/4) = 8 ∗ 7/4 = 14.
  80. Ora 1.11 … 1 2 = 1 + 1/2 +

    1/4 + ⋯ + 1/223. E, prova-se por indução finita em N, que 1 + 1/2 + 1/4 + ⋯ + 1/2 = (2+1 − 1)/2. Mestre, porque 1.11 … 1 2 = (224 − 1)/223 ?
  81. = 0.25 O épsilon é IMPORTANTÍSSIMO em Cálculo Numérico Define-se

    ε (leia épsilon) como “a distância entre 1.0 e o próximo número normal da representação IEEE”
  82. No IEEE Single, o próximo número normal depois do 1.0

    é 1 . 0000 0000 0000 0000 0000 001 Assim = 1 223 ≅ 1.1920928955078125 ∗ 10−7 4 8 12 16 20 23 posição No Toy 2, o 1º número após 1.0 é 1.0001 2 e então 2 = 1/24 = 0.0625.
  83. No IEEE Double, o próximo número normal depois do 1.0

    é 1 . 0000 0000 0000 ... 0000 0000 0001 Assim = 1/252 ≅ 2.220446049250313 ∗ 10−16 4 8 12 44 48 52 posição
  84. A distância entre pontos consecutivos dos sistemas IEEE Toy 1,

    IEEE Single, etc, será sempre um múltiplo de seu ε por uma potência de 2 (o fator de escala). 2ε ε ε/2
  85. ε ULP é uma sigla para unit in the last

    position. A unidade na última posição de , (), para ∈ 1 é o número definido por = 2exp (). Nada mais que o produto do fator de escala de por .