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

Aproximando com o IEEE 754

Paulo Bordoni
November 12, 2013

Aproximando com o IEEE 754

Sem comentáruios

Paulo Bordoni

November 12, 2013
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Passaremos agora a analisar de que forma os números IEEE

    754 aproximam números reais. Encerramos a aula passada explorando os limites numéricos das representações IEEE.
  2. = 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”
  3. 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.
  4. 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
  5. 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
  6. ε 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 .
  7. ε Como o épsilon, a ULP(x) também é um conceito

    FUNDAMENTAL em Cálculo Numérico
  8. Os sistemas IEEE 754 de ponto flutuante NÃO foram criados

    para representar números reais no computador.
  9. Sim, para aproximar, pois os sistemas IEEE são constituídos apenas

    por uma quantidade enorme, porém finita, de números racionais. Eles foram criados para aproximar!
  10. O ato de aproximar, não importa como, terá que ser

    descrito por uma função. Para garantir que, a um número ∈ ℝ não estejam associados mais do que um aproximando.
  11. Uma causa não pode possuir mais que um efeito. Efeito

    Outro efeito Causa Situação proibida para funções É, nós matemáticos sabemos disso. Está na definição de função:
  12. Saber que será uma função facilita enormemente a investigação –

    já conseguimos um mapa da mina! Sim. Além da regra de associação, toda função possui um domínio, um contradomínio e um conjunto imagem.
  13. É óbvio que o contradomínio será um dos sistemas de

    representação do IEEE 754, Single, Double, Quad Toy 1 ou Toy 2. E, o domínio, o conjunto ℝ dos números reais. O nome de batismo escolhido para essas funções será de float, mais um qualificativo.
  14. O passo seguinte envolve a normalização de 2 . O

    1º passo para calcular a representação padrão IEEE 754 de um número ∈ ℝ é obter sua representação binária 2 .
  15. A forma normal de 2 é definida por 2 =

    ±2(2) ∗ 1. (2 ) ATENÇÃO: Ao normalizar 2 o expoente de normalização (2 ) é um número inteiro qualquer, isto é (2 ) ∈ ℤ.
  16. A primeira limitação, estabelecida pelo padrão IEEE 754 é no

    fator de escala: ≤ (2 ) ≤ . Tipo Half -14 16 Single -126 128 Double -1.022 1.024 Quad -16.382 16.384
  17. Os números ∈ ℝ para os quais − < 2

    < + são classificados como normais. São os “números reais” com os quais operamos normalmente nos computadores. + e − são os limitantes superior e inferior do padrão IEE 754 – são “divisores de águas”. Eles correspondem aos números reais 2 e −2 respectivamente.
  18. O zero não é passível de normalização. Para preservar a

    regularidade para números muito pequenos (realmente minúsculos) foi necessário criar a faixa de denormalização. (-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
  19. Eles são classificados como NaN (Not a Number) ou ±.

    São entidades incluídas no padrão IEEE 754 para tratamento de exceções. Não são passíveis das operações aritméticas elementares. Números reais cujo expoente 2 ≥ são números grandes demais para serem incluídos na representação padrão IEEE 754.
  20. ATENÇÃO! A razão de ser dos números nos computadores é

    computar. Sempre atento Filósofo! Os NaN, + e – não estão no IEEE 754 para efetuarmos continhas com eles. Computar = efetuar as operações aritméticas básicas
  21. Truncar significa desprezar os dígitos da fração da representação de

    ponto flutuante de a partir de um certo dígito. Uma forma de aproximar um número ∈ ℝ/ (portanto já na base 2 e normalizado), por um número ∗ do IEEE 754 é por truncamento.
  22. Bit do sinal de x Bits do expoente de x

    Bits da fração de x TRUNCAR significa desprezar todos esses bits de x! • Toy 1 ......... 2 bits • Toy 2 ........ 4 bits • Single ....... 23 bits • Double ...... 52 bits • Quad ........ 112 bits A representação binária normalizada de e o nº de bits a manter na fração para obter ∗
  23. Fique esperto Surfista, no truncamento, ∗ é o número de

    Toy 1 entre e zero, não o mais próximo. Idem, ibidem, para os outros sistemas IEEE (Single, Double e Quad). ∗ Para ir de para ∗ caminhamos em direção ao zero. Inclusive quando é negativo.
  24. Pois é, no truncamento você sempre “perde” dígitos, mas preste

    atenção no exemplo: Truncando 2.38 obtemos 2.3 e truncando −2.38 obtemos −2.3, ambos mais próximos de zero (Note que −2.3 > −2.38). Assim, ao truncar, você sempre “caminha” em direção ao zero. Mas, se no truncamento “perdemos” dígitos então ∗ ≤ , de forma que ∗ sempre estará à esquerda de , na reta real.
  25. Surfista, quais são os intervalos correspondentes noToy2, Single, Double e

    Quad ? Os números ∈ ℝ aos quais poderemos associar um NÚMERO ∗ ∈ 1, via truncamento, são aqueles situados no intervalo (−, +). No Toy 1, o intervalo (-16,+16). +Inf
  26. 1.0 1.25 0.75 0.25 0.5 0.62 5 0.0625 0.125 2.5

    2.0 1.75 1.5 0.1875 0.3125 0.375 0.4375 0.87 5 0.0 1.25 0.75 0.25 0.5 0.625 0.0625 0.125 2.5 2.0 1.75 1.5 0.1875 0.3125 0.375 0.4375 0.875 0.0 1.0 Portanto, o gráfico da função ∶ ℝ → 1 é o de uma função escada. A figura só mostra a parte inferior do gráfico. Lá embaixo, os de- normalizados, em amarelo.
  27. 16.0 14.0 5.0 12.0 10.0 6.0 7.0 8.0 4.0 20.0

    24.0 3.5 3.0 +Inf 14.0 5.0 12.0 10.0 6.0 7.0 8.0 4.0 NaN 3.5 3.0 A parte superior do gráfico. Vejam o + e o NaN.
  28. Professora, os dois gráficos estão em escalas diferentes, não? 1ª

    figura 2ª figura Sim querida, veja a mudança de escala entre as duas figuras E para ∈ ℝ, ≤ 0, o gráfico de f l é o reflexo desse com relação aos eixos-x e y.
  29. É importante observarmos que exp = exp (∗) quando ∗

    = , porque efetuamos a normalização antes de truncar para obter ∗. Portanto ∗ = ε ∙ exp ∗ = ε ∙ exp = , embora isto possa soar de forma estranha.
  30. ∗ = () ∗ = () Assim, a desigualdade −

    < , é válida para qualquer sistema de ponto flutuante IEEE 754, quando usamos truncamento para ∈ −, + , na faixa normal. Essa desigualdade é óbvia, já que (∗) é a distância entre ∗ e o elemento seguinte de Toy 1.
  31. Observem que − < , estabelece um limite superior para

    o erro absoluto cometido ao aproximarmos por , quando ∈ −, + .
  32. Essa é a importância anunciada da () no início da

    aula. Ela mede o erro absoluto na aproximação de por (): − < , quando ∈ (−, +).
  33. Ora, para ∈ −, + , na faixa normal, temos

    = 1 + () 2exp () ≥ 2exp e portanto: − < () || ≤ 2exp 2exp =
  34. Essa desigualdade dá um limite superior para o erro relativo

    cometido ao aproximarmos por f l (x), quando truncamos. O Mestre acabou de provar que − || < ℰ , para ∈ −, + , quando usamos truncamento para obter ().
  35. Mestres, esse limitante não depende de – só do do

    sistema IEEE 754. Genial Surfista. Essa tua sacada é tão importante quanto aquele tubo fantástico que te deu o Campeonato Mundial de 2012!
  36. Este é o teorema fundamental da representação de ponto flutuante

    IEEE 754: Para todo número real ∈ (−, +) temos = (1 + ) para algum satisfazendo < , onde é o épsilon do sistema de ponto flutuante IEEE 754, quando usamos truncamento.
  37. 0 − () Claro, pois de − < , é

    imediato que existe δ ∈ −ε, para o qual () − = , isto é: = (1 + ).
  38. De fato, o padrão IEEE 754 estabelece quatro possíveis funções

    de aproximação ∶ ℝ → ( ) ↦ ∗ = () Nome da função ∗ aproxima por truncamento arredondamento ↑ em direção a +∞ ↓ em direção a −∞
  39. Bits do sinal de Bits do expoente de Bits da

    fração de Bit de arredon- damento de Na aproximação ∗ de por arredondamento, ∗ = (), o papel do bit + 1 de , é fundamental. bits
  40. A aproximação ∗ = () é definida por ∗ =

    = 0 + 1 = 1 (∗) onde: • 1 = 0.00 ⋯ 01 (1 na última posição da fração); • o bit na posição + 1 de , dito bit de arredondamento ∗ − eventualmente será necessário renormalizar ∗.
  41. Mestres, como faço para buscar informação sobre esses assuntos no

    Numpy? Bem, Loirinha, vou pedir à Professora para te ajudar. Ela tem mais paciência!
  42. Essa é a hierarquia de tipos no NumPy. Nosso foco,

    no momento, está assinalado em vermelho.
  43. Números “reais” em ponto flutuante e números complexos em ponto

    flutuante. Os dois grupos assinalados são específicos de NumPy.
  44. O programinha a seguir recebe um decimal, via teclado e

    devolve suas representações binárias IEEE 754/2008 em: • Half (via numpy.float16) • Single (via numpy.float32) • Double (via nump.float64) Na formatação de saída forçamos 16 dígitos após a vírgula para exibir os erros inerentes ao processo.
  45. O simples ato de entrar com um número, via teclado,

    causa erro de representação decimal. Para Single em mais de 99.99% dos casos.
  46. Acontecerá algo parecido no Single e no Double? Que horror!

    Mestre, no float16, os 31 números: 65489, 65480, ... , 65519 retornam o mesmo valor, 65504. E o 65520 retorna +inf.
  47. Usaremos o float16 para evidenciar, de forma gritante, a propagação

    do erro no cálculo de funções. Aguardem! Vou retroceder no tempo, lá para a Magna Grécia, nos 400 AC. Desisto de apoiar os cursos desse Professor. Lá usamos ábacos – são mais confiáveis que esses computadores.
  48. Mestres, continuo angustiada! Existe alguma outra forma de buscar informação

    sobre esses assuntos no Numpy sem ter que que olhar o Manuel todinho – da 1ª à última página??? Bem Loirinha, resolva sua angústia com seu Psicanalista. Aqui usaremos o Google!
  49. Para inteiros... Vou experimentar! Loirinha, vc. fez um golaço! É

    uma forma de obter os expoentes das representações float e double!
  50. Bem, Loirinha, vamos buscar informações sobre “floating point”. E agora

    Mestra? Em “binary representation” não havia nada!
  51. Nossa, quanta informação. Novamente, vou no 1º da lista, finfo.

    Nossa, quanta informação. Vou olhar a 1ª da lista, a finfo
  52. Surfista! Buscando por finfo no Sumário do Manuel do Numpy

    você é levado de imediato para esta página.
  53. Obrigado Manoel. Vemos que a classe finfo fornece informações sobre

    tipos float do Numpy (seus limites). Mestra não vejo como proceder para utilizar essa classe. Além disso, parece que faltam informações (Atributos = ??).
  54. Certo, meus jovens, Vamos usar o velho help(finfo) Para quem

    sabe Python, basta esta informação!
  55. Instanciando o parâmetro dtype dessa classe com objetos apropriados (tipos

    float) do NumPy, obteremos informação sobre seus limites.
  56. Half s e f 16 bits 10 bits 5 bits

    Esse é o desenho do tipo half (float16).
  57. (-1)s ∗ 2e-15 ∗ (1.f) ..... se 0 < e

    < 31 (-1)s ∗ 2e-14 ∗ (0.f) .... se e = 0 e f ≠ 0 (-1)s ∗ 0 ..................... se e = 0 e f = 0 (-1)s ∗ Inf ................. se e = 31 e f = 0 NaN .......................... se e = 31 e f ≠ 0 x = O bias é 01111 = 15 e épsolon é dado por ε = 2-10 = 1/1024 = 0.0009765625. A regra de decodificação é:
  58. Loirinha, os Mestres já falaram sobre quase tudo isso! É...

    Mas estou curiosa para ver o que mais tem no MachAr.
  59. Parece igual, Surfista: MachAr também é uma classe do Numpy,

    com vários métodos (as funções) e atributos.