As operações elementares, algoritmos e a propagação de erro. A falha do míssil Patriot e a explosão do Arianne 5. Os 10 mandamentos de uma computação segura.
de seu protetor, o Duque Lodovico Sforza. O trabalho se encontra no convento de Santa Maria delle Grazie, em Milão. Já vi muitas cópias desta. É A Última Ceia. Só não sabia que também era dele!
saber mais sobre a Renascença. Além de Da Vinci, conheçam mais sobre Michelangelo, Rafael Sanzio e outros fora da Itália. http://en.wikipedia.org/wiki/Renaissance_art
números no padrão IEEE, Single ou Double apresentam • erro absoluto da ordem da ULP • erro relativo da ordem de ε. Esse é o aspecto estático das coisas. E a dinâmica dos processos?
reside na possibilidade de computar com eles. “C’est la raison d’etre” dos computadores. Como se comportarão as operações algébricas perante tais erros?
adição por computador e a comum? A resposta é tão simples, que parece tola: para realizar a adição comum, “com lápis e papel”, (i.é, pela definição) precisamos “casar as vírgulas”.
expoentes e a fração correspondente. Entretanto, no computador, os números estão em ponto flutuante IEEE 754. 2345,6 = 2,3452 ∗ 10 3 1,023456 = 1,023456 ∗ 10 0
∗ 10 0 0,001023456 ∗ 10 3 A ação: “casar as vírgulas”, envolve: 1. Igualar o menor dos expoentes ao maior. 2. Deslocar, para a direita, a fração do número de menor expoente, tantas “casas decimais” quantas for a diferença dos expoentes.
absolutamente igual a multiplicar por 10 -3. • Para compensar multiplicamos o número por 10 3. • O número continua o mesmo. 2,3456 ∗ 10 3 2,3456 ∗ 10 3 1,023456 ∗ 10 0 0,001023456 ∗ 10 3
limitado a 23 bits no Single. Algo entre 6 e 7 dígitos decimais. Então, parte da fração será perdida: 2,346623456 2,346623 2,3456 ∗103 + 0,001023456 *103 2,346623456 ∗103
as propriedades básicas: • x+(y+z) = (x+y)+z ....... Associativa • x+y = y+x .................... Comutativa • x + 0 = x ...................... Existência e unicidade do neutro • -x + x = 0 .................... Existência e unicidade do oposto Adição • x∗(y ∗ z) = (x ∗ y) ∗ z .... Associativa • x ∗ y = y ∗ x .................... Comutativa • x ∗ 1 = x ......................... Existência e unicidade do neutro • x ∗ x-1 = 1 ....................... Existência e unicidade do inverso, se x ≠ 0 Multiplicação
computadores sabem fazer são essas duas operações elementares. Sim Sherlock. Mais as operações lógicas, inclusive as de comparação. Será que as propriedade serão mantidas para os números IEEE 754?
comutativas. Além disso, pela própria construção, todo número x possui seu oposto -x. Basta trocar o bit do sinal. Uma análise rápida, mostrará que todas as outras propriedades falham. Vejam os contra-exemplos a seguir:
de x. Nele faço x assumir, sucessivamente, os valores x = 0.1, 0.2, ..., 0.9. Em seguida calculo as potências xk e x- k e o produto xk ∗ x- k, para expoentes 1,2, 3 ... Quando xk ∗ x- k ≠ 1, interrompo.
muito próximos, sua diferença x - y, fica muito poluída pelos erros de representação. Pode até não significar NADA! Quando os números são quase iguais suas frações, na representação binária IEEE 754, diferem apenas nos últimos dígitos (que normalmente já estão poluídos). Ao subtrairmos, eles se cancelam, e a diferença pode ser lixo.
número real x, sempre existirá um número x* do Toy 1 para o qual | x – x* | < ULP(x)/2 Sim Mestra, para x na faixa normal do Toy 1 e usando arredondamento.
fl(x), temos | x – fl(x) | < ULP(x)/2 para x na faixa normal do Toy 1 e usando arredondamento. E este é um resultado válido para qualquer sistema de ponto flutuante IEEE 754.
floats do IEEE 754 é verificar a desigualdade | x – y | ≤ ULP(x,y), onde ULP(x,y) = max { ULP(x), ULP(y) }. E também que: • x – y > ULP(x,y) ⇒ x > y • y – x > ULP(x,y) ⇒ x < y
computador como uma ferramenta para a Computação Científica, precisamos conhecer as limitações impostas pelo padrão IEEE 754. Algumas pecados podem ser evitados, outros devem apenas ser compreendidos e aceitos.
conversões apresentam erro. Em Double muito mais. Lembrai-vos do erro de conversão de números decimais para binários e vice-versa (input/output). 2º mandamento
comentar ainda que: • Conversões de Single para Double não aumentam o número de bits significativos. • Conversões para tipos inteiros sempre truncam ( zero). Pode até acontecer de int(x) ≠ x quando x é um “inteiro em ponto flutuante”. Não efetuarás conversões de tipo impunemente. 6º mandamento
detalhes do padrão de forma diferente. Idem para acréscimos nas máquinas virtuais Java ou Python, que é herdeira de C padrão, que usa IEEE 754. Não acreditarás que implementações distintas do padrão IEEE 754 apresentarão os mesmos resultados. 8º mandamento