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

Números no computador ou IEEE 754

Números no computador ou IEEE 754

...

Paulo Bordoni

April 09, 2015
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. 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. Começaremos olhando para codificações. Elas são como dicionários: uma lista de símbolos, cada um com seu significado.
  2. Ao pressionar uma tecla fecha-se o circuito e é transmitido

    um sinal elétrico para um chip, que o transforma em UNICODE. Dentro do teclado: 3 folhas de laminado plástico. Duas com circuitos impressos. A 3ª isola essas duas e possui furos sob cada tecla Numa “fios” na direção longitudinal; na outra os fios são transversais
  3. 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. Como numerais digitados viram números.
  4. 1. O usuário digita um numeral 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) , ou JVM (Java Virtual Machine) ou a .net (da Microsoft) recebem essa cadeia UNICODE e a transformam em um número computável.
  5. y = ± y 0 . y 1 ... y

    k ∗ 2 exp Sinal Expoente Fração Fator de escala No computador as quatro características fundamentais permanecem:
  6. y = ± y 0 . y 1 ... y

    k ∗ 2 exp Sinal Expoente Fração Fator de escala A diferença é que a fração e o expoente serão números binários. E o fator de escala será 2.
  7. Tá brincando! Só pode ser piada de Manuel! Surfista, tenho

    uma notícia muito cruel para tí: Não existem números reais nos computadores!
  8. É a mais pura verdade meus jovens. Estamos limitados a

    trabalhar com números racionais (frações) nos computadores. É bem pior que isto, Surfista, apenas com uma parte, um subconjunto finito dos racionais!
  9. 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
  10. Surfista e Loirinha, conscientizem-se da tragédia: A continuidade dos números

    reais desapareceu, sumiu, no interior dos computadores. Ninguém sabe, ninguém viu!
  11. Senhores, como disse Shakespeare, 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 . Existe até a lenda de que eles mataram por isso.
  12. 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!
  13. • 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!
  14. 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).
  15. 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
  16. 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!
  17. 1 bit para o sinal 16 bytes = 128 bits

    15 bits para o expoente 112 bits para a fração O padrão Quad
  18. 1 bit para o sinal 8 bytes = 64 bits

    11 bits para o expoente 53 bits para a fração O padrão Double
  19. 1 bit para o sinal 4 bytes = 32 bits

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

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

    2 do número, somado com um desvio de 12710 = 0111 11112 . s e f O campo do expoente no padrão Single
  22. É mais fácil pensar assim: se o expoente é +3

    converta 130 = 127 + 3 para a base 2. O expoente será 1000 0010, uma cadeia com 8 bits. Já, se o expoente é −3, converta 124 = 127 – 3 para a base 2. O expoente será 111 1100, uma cadeia com 7 bits. Depois, acrescente um 0 à frente para formar uma cadeia de 8 bits: 0111 1100
  23. Portanto, se o expoente for positivo, a soma com o

    bias será maior que 127 e sua representação binária sempre possuirá um 1 na frente. E se ele for negativo, a soma com o bias será menor que 127 e sua representação binária possuirá 7 bits ou menos. Então precisaremos acrescentar zeros á frente até formar 8 bits..
  24. 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
  25. 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
  26. (-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 A conversão binário-decimal no padrão Single segue a regra:
  27. (-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 A conversão binário-decimal no padrão Double segue a regra:
  28. -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 Faixa normal Excessão Desnormalização No padrão IEEE 754/2008, a ordenação dos expoentes em Single é: Decimal Binário
  29. Faixa dos NaN negat. Faixas positiva e negativa dos denormalizados

    Faixa normal negativa Faixa normal positiva Faixa dos NaN posit. +Inf -Inf Esta é a reta “real” nos computadores. Mais furadinha que peneira!
  30. A quantidade de números Single no padrão IEEE 754/2008, é

    232 = 4.294.967.296 Quase 4,3 bilhões. Uma quantidade enorme de números! Em 1978 a Terra tinha 4,3 bilhões de habitantes, hoje mais de 7,1 bilhões.
  31. O diâmetro de um átomo de hidrogênio é 74,6 ∗

    10−12 metros. Se cada ser humano tivesse o tamanho de um átomo de hidrogênio, em 1978, formaríamos uma fila de 32,8 cm. O mesmo comprimento da fila de Singles, se cada um deles também tivesse o tamanho de um átomo.
  32. A quantidade de números Double é 264 = 18.446.744.073.709.551.616 ≈

    1,84 ∗ 1019 números. Se cada Double também tivesse o tamanho de um átomo de hidrogênio, a fila teria 1,41 milhões de km, o equivalente a 3,67 viagens da Terra à Lua.
  33. Essas comparações objetivam dar uma ordem de grandeza dessas quantidades

    de números em Single e Double. Mas lembrem-se, Surfista e Loirinha: Os números reais constituem contínuo – um infinito impensável de ser contado!
  34. Para entender melhor o padrão IEEE 754/2008 vamos construir um

    sistema numérico de brinquedo. Fala sério, Mestre!
  35. s e f Toy IEEE 64 números Vamos construir um

    sistema Toy IEEE, com 6 bits :
  36. -3 000 -2 001 -1 010 0 011 1 100

    2 101 3 110 4 111 Faixa normal Exceção De-normalização e s e f Toy IEEE No Toy IEEE os expoentes possíveis são os 8 abaixo:
  37. s e f Toy IEEE 00 ....... 0.00 01 .......

    0.25 10 ....... 0.50 11 ....... 0.75 f Já no Single são 223 = 8.388.608 frações possíveis No Toy IEEE as frações possíveis são as 22 = 4 abaixo:
  38. (-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 = Construímos o padrão Toy IEEE para visualizar os números no computador. Nele, a regra de decodificação é semelhante à dos outros.
  39. Na primeira linha da matriz os desnormalizados. 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 números. normais. E os negativos?
  40. Vejam, para cada grupo de 4 números, o fator de

    escala muda. Acompanhem a inclinação das retinhas.
  41. Vou quebrar esse gráfico em dois para examinar melhor. Um

    de y = 2. para baixo e outro de y = 2. para cima. Sim, para cada grupo de 4 números do Toy IEEE o fator de escala muda numa potência de 2: 2-2, 2-2, 2-1, 20, 21, 23 e 24.
  42. Valeu, Mestre, inclusive vejo que a escala é a mesma

    para a menor faixa dos normais e a dos de-normalizados, em vermelho.
  43. Imaginem se não houvesse sido criada a faixa de denormalizaçã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*
  44. 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 IEEE é dado por 2−3 ∗ (1. ). Com = 1 = 00, obtemos 1/22 = 0.25.
  45. Vejam, o maior normal é 14. Já em vermelho: •

    +Inf corresponde a 16. • e os NaN a 20., 24. e 28.
  46. Exatamente, +∞ ∉ ℝ. E o + faz o papel

    de +∞ no Toy IEEE e em todos sistemas IEEE 754. Mestre, aprendi em Cálculo I que ±∞ não são números. Então, pq + = 16 ?
  47. Observe, por exemplo, no Toy IEEE, 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 ?
  48. 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 IEEE é dado por 2−3 ∗ (1. ). Com = 6 = 11 obtemos 23 ∗ (1 + 1/2 + 1/4) = 8 ∗ 7/4 = 14.
  49. 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 ?
  50. = 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”
  51. 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
  52. 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
  53. A distância entre pontos consecutivos dos Toy IEEE, no Single,

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

    position. A unidade na última posição de , (), para ∈ é o número definido por = 2exp(). Nada mais que o produto do fator de escala de por .
  55. Os sistemas IEEE 754 de ponto flutuante NÃO foram criados

    para representar números reais no computador.
  56. 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!
  57. 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.
  58. A velha ideia que uma causa não pode possuir mais

    que um efeito. Efeito Outro efeito Causa
  59. 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.
  60. É óbvio que o contradomínio será um dos sistemas de

    representação do IEEE 754, Single, Double, Quad ou Toy IEEE. 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.
  61. 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 .
  62. 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 ) ∈ ℤ.
  63. 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
  64. 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.
  65. 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.
  66. 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.
  67. 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
  68. 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 já na base 2 e normalizado, por um número ∗ do IEEE 754 é por truncamento.
  69. 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 IEEE .. 2 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 ∗
  70. Fique esperto Surfista, no truncamento, ∗ é o número de

    Toy IEEE 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.
  71. 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.
  72. Surfista, quais são os intervalos correspondentes noToy2, Single, Double e

    Quad ? Os números ∈ ℝ aos quais poderemos associar um NÚMERO ∗ ∈ , via truncamento, são aqueles situados no intervalo (−, +). No Toy IEEE, o intervalo (-16,+16). +Inf
  73. 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 ∶ ℝ → é o de uma função escada. A figura só mostra a parte inferior do gráfico. Lá embaixo, os de- normalizados, em amarelo.
  74. 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.
  75. Professora, os dois gráficos estão em escalas diferentes, não? Sim

    querida, veja as distâncias entre 2.0 e 2.5 na 1º e entre 3.0 e 3.5 na 2°. E para ∈ ℝ, ≤ 0, o gráfico de f l é o reflexo desse com relação aos eixos-x e y.
  76. É 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.
  77. ∗ = () ∗ = () 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 IEEE.
  78. Observem que − < , estabelece um limite superior para

    o erro absoluto cometido ao aproximarmos por , quando ∈ −, + . Atenção Mestre! Você esqueceu de excluir os denormalizados dessa tua afirmação.
  79. A partir de − < (), podemos provar que −

    () < , ∀ ∈ −, + , ≠ 0. Novamente! Você esqueceu de excluir os denormalizados dessa sua afirmação.
  80. Essas duas afirmações são conhecidadas na literatura como Teorema Fundamental

    da Representação de Ponto Flutuante IEEE 754. ∀ ∈ −, + , na faixa normal: − < . Erro absoluto ∀ ∈ −, + , ≠ 0, na faixa normal: − () < . Erro relativo
  81. Mestra, o erro relativo independe do valor de ? Exatamente

    minha filha, excelente observação!
  82. Uma consequência direta do Teorema Fundamental da Representação de Ponto

    Flutuante IEEE 754 é o resultado abaixo: ∀ ∈ −, + , ≠ 0, na faixa normal: = (1 + δ), com || <