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

Operações elementares no IEEE 754

Operações elementares no IEEE 754

Paulo Bordoni

March 18, 2019
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Flores lindas! Veremos, ao estudar as operações elementares no computador,

    que os jardins da Análise Numérica possuem ervas daninhas.
  2. A operação elementar mais simples é a entrada de dados

    (input) no computador. Ela é uma fonte de problemas numéricos!
  3. 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”.
  4. 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 . . .
  5. Para números racionais, o algoritmo de conversão 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. Em todos os outros casos, a representação do número racional, na base 2, é uma seqüência periódica – uma “bí”zima periódica
  6. Como as representações IEEE 754 possuem apenas uma quantidade finita

    de bits na fração, precisaremos truncá-los. O que introduzirá um erro na representação IEEE 754 do número!.
  7. Se as bízimas forem poucas não haverá muito problema, Mestres!

    Vou mostrar a você que, infelizmente, serão muitas bízimas. Na verdade a grande maioria!
  8. 80% dos números decimais com apenas 1 dígito após a

    vírgula geram bízimas periódicas na base 2: Surfista! Construa 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 converta para a base dois. 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
  9. 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ígitos após a vírgula geram dízimas periódicas na base 2:
  10. 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!
  11. 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 é bízima periódica. No padrão Single: 99,99 %.
  12. 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. Não chega a 6 milésimos %.
  13. Não minha Loirinha querida! É que no padrão Single, temos

    24 = 23 + 1 bits de precisão. O Mestre parou em sete dígitos após a vírgula. Por quê? Sete é algum número mágico Mestra?!
  14. É 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!
  15. Pois é, como na Internet, vocês precisarão separar “o joio

    do trigo”. Eliminei algumas que não tem nada a ver!
  16. Não risquei as “Data type ...” porque float é um

    tipo de dado. Explique porque você deixou as outras, Surfista. Acho importante esclarecer seu critério de busca!
  17. O Surfista tem razão, Mestre. Dê uma mãozinha, pois o

    “help” não está muito claro! É só instanciar o parâmetro dtype com o tipo que desejamos obter as informações. Por exemplo: dtype = numpy.float32.
  18. Façam um programa que calcula a ULP(x) para x dado.

    Como exercício, procurem as informações nos “links” indicados como importantes pelo Surfista: MachAr e iinfo.
  19. O Eps já sabemos onde obter. Só falta descobrir como

    calcular exp(). Essa é fácil, = ∗ 2exp().
  20. Dei uma busca em “Floating point routines”. Como o resultado

    é quase igual à nossa busca anterior, já eliminei as 3 primeiras.
  21. A “Data type routines” também risco – foi a anterior.

    As duas seguintes não tem nada a ver. Vamos tentar “Mathematical functions”.
  22. Isso mesmo Loirinha, ela recebe e retorna a () e

    () na base 2, que usaremos para calcular (). Vou lá ver!
  23. Será sempre assim, Surfista? O valor recuperado de x será

    sempre o mesmo? Boa pergunta, coleguinha! Experimentem, com valores extremos. Tanto grandes como pequenos!
  24. ATENÇÃO: os sistemas IEEE 754 de ponto flutuante NÃO foram

    criados para aproximar números reais no computador.
  25. Nossa análise até agora mostrou que: Mais de 99,99% dos

    números ∗ = () do padrão IEEE, Single ou Double apresentam: • Erro absoluto limitado pela (). • Erro relativo limitado pelo “épsilon da máquina”, Eps.
  26. = − ∗ < = − ∗ < Insistindo no

    aspecto fundamental: ∈ ℝ mas ∗ = ∈ ℚ, com: Mas você está focando apenas no aspecto estático das coisas. E a dinâmica dos processos?
  27. De fato Professora, a principal razão de existência dos números

    reside na possibilidade de computar com eles. “C’est la raison d’être” dos computadores. Como se comportarão as operações algébricas perante tais erros?
  28. Mestres, Existem conhecimentos subjacentes ao entrelaçamento operações algébricas ↔ IEEE

    754 que precisam ser aprofundados. Sim Filósofo, precisaremos entender o comportamento das operações algébricas no seio da IEEE 754.
  29. As operações algébricas são funções definidas para números reais. A

    adição recebe um par de números reais e devolve um número real. Isto também vale para os racionais e os complexos. + Adição z = x + y ℝ (x,y) y x ℝ ℝ
  30. ∗ Multiplicação (x,y) y x ℝ ℝ z = x

    ∗ y ℝ O mesmo vale para a multiplicação em ℚ, ℝ e ℂ.
  31. Vocês já devem ter ouvido falar que ℚ, ℝ e

    ℂ com as operações de adição + e multiplicação ∙ constituem estruturas algébricas com propriedades os tornam um corpo. Em outras palavras, são grupos abelianos para a adição e a multiplicação (tirando o 0) e que satisfazem também a distributividade da multiplicação sobre a adição.
  32. Só para recordar, um grupo abeliano é um conjunto com

    uma operação ∘∶ × → satisfazendo as propriedades básicas: 1. Comutativa: ∘ = ∘ , , ∈ . 2. Associativa: ( ∘ ) ∘ = ∘ ( ∘ ), , , ∈ . 3. Existe um elemento, ∈ , nominado identidade, para o qual ∘ = 4. Cada ∈ possui seu inverso −1, solução de ∘ −1 = .
  33. Quando a operação é a adição, a identidade é o

    zero, 0. Quando é a multiplicação a identidade é o 1. Na multiplicação de matrizes é a matriz identidade I. Na composição de funções, é a função identidade, : → .
  34. Além disso ℚ e ℝ são corpos ordenados. Isto é,

    para quaisquer , , ∈ ℚ, ℝ valem as afirmações: • > ⟹ + > + • > 0 > 0 ⟹ > 0 Aliás, não existe uma relação de ordem natural em ℂ. Não há como dizer que um número complexo é maior que outro.
  35. Observem que para obter o oposto, −, e o inverso,

    1/, de ∈ ℝ temos que resolver os problemas inversos: • Qual ∈ ℝ satisfaz a equação + = 0. • Qual ∈ ℝ satisfaz a equação ∗ = 1 São as operações de subtração e divisão (− e /) que fornecem a solução para esses problemas.
  36. Assim, operacionalmente, não basta falar em adição e multiplicação. Precisaremos

    das quatro operações elementares +, −, ∗ e /. E, também da igualdade =, ≠ , das operações lógicas ( ∧,∨, →, ↔ ) e da relação de ordem >, ≥ .
  37. É por esse motivo operacional que os computadores possuem uma

    unidade de aritmética e lógica na qual essas operações foram implementadas de acordo com os padrões do IEEE 754. Eu nunca tinha me detido em pensar nessas questões, Filósofo!
  38. As linguagens C e Fortran padrão usam a unidade de

    aritmética e lógica. Linguagens como Python, Java e as .net trabalham com máquinas virtuais que obedecem o padrão IEEE 754 em suas implementações. Assim, todas as operações lógicas, comparações e as operações elementares +, −, ∗ , / e já satisfazem o padrão IEEE 754.
  39. Mas será que, operacionalmente, a aritmética do IEEE 754 manterá

    as propriedades de corpo? Não será possível! Mas essa tua pergunta, desencadeará uma série de outras perguntas.
  40. Este exemplo simples, com o Toy System, que obedece o

    IEEE 754, confirma que a adição não é fechada. Vejam, a soma de = 0.125 e = 1.0, ambos números do Toy, é + = 1.125, que não está no Toy System. +
  41. Bem Loirinha, o passo seguinte é obrigar “a ovelha desgarrada”

    retornar ao lar. Mas e aí, o que eu faço com o resultado? +
  42. Em outras palavras, precisamos transformar o resultado num número do

    tipo IEEE 754. Sim, e esse “modus operandi” se aplica a todos os tipos float do IEEE 754.
  43. Não Loirinha, quando somamos dois números, o computador (o IEEE

    754) já dá o resultado diretamente! Mas, depois de calcular + , eu sempre vou ter que aproximar o resultado, isto é calcular ( + ) ?
  44. IEEE 754 Operações com IEEE 754 ℚ IEEE 754 IEEE

    754 A imagem a gravar é esta, para todas as operações elementares e a . ∘ = +,∗, −,/, ∗ = ( ∘ ) = ∘ ∘ (, ) ° *
  45. Notem que essa é uma forma de preservar “minimamente“ a

    propriedade do fechamento: Forçar que a soma (ou −, ∗, ÷, ) de dois floats seja um float. “Minimamente” porque o resultado é aproximado!
  46. A forma encontrada para preservar “minimamente” a propriedade do fechamento

    é garantir que o resultado satisfaça o Teorema fundamental da representação de ponto flutuante IEEE 754/2008.
  47. Se , ∈ ℝ e , e ∘ estão na

    faixa normal de um dos sistemas IEEE 754, então ∘ = ( ∘ )(1 + ) para algum satisfazendo < . Substitua ∘ por +, −, ∗, / ou .
  48. • Erro relativo: Τ ∘ − ∘ | ∘ |

    < , ∘ ≠ 0 • Erro absoluto: ∘ − ∘ < ( ∘ ) Em outras palavras, são observadas as limitações para o erro:
  49. Ainda assim, perdemos a propriedade do fechamento. Claro, pois como

    os números do IEEE 754 estão limitados à faixa −, + , basta somar dois números grandes para cair fora dessa faixa.
  50. Esta outra perda não será tão problemática pois os sistemas

    IEEE 754 nos informarão com mensagens do tipo NaN (Not A Number). Portanto, para nossos programas não travarem, temos que incluir rotinas para tratamento desses tipos de exceção.
  51. Mestres, os sistemas IEEE de ponto flutuante são constituídos apenas

    por números racionais. Para eles não vale a propriedade de existência do supremo! Exatamente, Surfista. Esta é a maior perda. Ela é terrível!
  52. Mas, então como faremos as coisas de Cálculo no computador?

    A palavra chave é engenhosidade Loirinha, criatividade e conhecimento.
  53. Loirinha, o Mestre repete toda hora “matemática do contínuo”, “matemát...”

    Estou perdendo a paciência! Pois é! Ele repete tanto que a continuidade dos reais passou a ser um problema existencial.
  54. Não minha filha, continuidade tem a ver com a prática.

    Com proximidade, com medir distâncias. Com trenas, réguas, paquímetros, telescópios, microscópios, ...
  55. Este paquímetro é limitado à vigésimos de centímetro. Vejam o

    1/20 na escala. Ele não funciona para qualquer precisão!
  56. Na definição de supremo que já vimos, temos: ∀ >

    0 e não ∀ ≥ 1/20. O controle não funciona para 0 < < 1/20. Em outras palavras mensuração da proximidade é limitada a vigésimos de centímetro. Seja mais claro, Cabelos de Fogo! controle
  57. O mesmo acontece com microscópios, lunetas e telescópios! São instrumentos

    analógicos limitados por sua precisão, são “quase contínuos”. Eu diria: Esse paquímetro funciona de forma contínua para medir coisas maiores que sua precisão de 1/20 centímetro.
  58. 0.05 0. cm Sim, este paquímetro é cego a partir

    0.05 cm. Não consegue distinguir a espessura de dois fios de cabelo! Fios de cabelo Zona de cegueira
  59. Volto a repetir o axioma da existência do supremo “Todo

    subconjunto (≠ ∅) limitado superiormente de ℝ possui um supremo” Ele traduz a ideia intuitiva da continuidade do conjunto ℝ dos números reais.
  60. − ∈ s Se um conjunto ⊂ ℝ é limitado

    ele tem um supremo ∈ ℝ − um número real que “cola” no conjunto : Não importa quão pequena seja a precisão > 0 sempre existirá um número real ∈ satisfazendo − < ≤ . Em outras palavras: não há espaço vazio entre o conjunto e .
  61. Surfista busque no site MacTutor History of Mathematics o texto

    abaixo, de J. J. O'Connor e E. F. Robertson.
  62. Pois é, como disse a Loirinha, a reta real do

    computador é toda furadinha, voltamos à Grécia antiga. O computador é uma máquina defeituosa. Tentaremos remendar (não dá para tapar!) seus furos com Cálculo Numérico!