Sistema de ponto flutuante Exemplo: FP(10,4,2,A) e FP(10,4,2,T) FP(b, p, q ,_) = FP( 10 , ↑ base 10 4 , 2 , _ ) ↑ ↑ ↑ 2 dígitos no A=Arredondamento 4 dígitos na expoente T=Truncatura mantissa 2 dígitos (base 10) x = ±m × b ±t → x = ±(0, d−1d−2d−3d−4 ) × 10 ± ( t1 t0 ) 4 dígitos (da base 10) Formato normalizado – com excepção da representação do número zero, d‒1≠0 pelo que 0,1000 ≤ m ≤ 0,9999 → 0,1 ≤ m < 1 → b−1 ≤ m < 1 Matemática Computacional, MEMec, LEAN, MEAer Unidade de arredondamento, u Unidade de arredondamento, u – majorante do erro relativo (possível de ser cometido) na representação dum número × bt m − m max(m − m ) x − x m × bt − m x − x m−m e= = = → max ( e ) = max = max ≤ <u x m × bt m x m min(m) Exemplo: FP(10,4,2,T) ): max(m − m min(m): 0,1 ≤ m < 1 → b−1 ≤ m < 1 → min(m) = b−1 = 0,1 x = 0,1000320, x = fl(x) = 0,1000 → x − x = 0,0000320 < 0,0001 x = 0,1000784, x = fl(x) = 0,1000 → x − x = 0,0000784 < 0,0001 x = 0,1000999, x = fl(x) = 0,1000 → x − x = 0,0000999 < 0,0001 ) < 0,0001 = 10− p → max(m − m ) < b− p max(m − m 0,0001 10 − p b− p −3 1− p u< = 0,001 = 10 → u < −1 = 10 → u < −1 = b1−p 0,1 10 b Matemática Computacional, MEMec, LEAN, MEAer Unidade de arredondamento, u Unidade de arredondamento, u – majorante do erro relativo (possível de ser cometido) na representação dum número × bt m − m max(m − m ) x − x m × bt − m x − x m−m e= = = → max ( e ) = max = max ≤ <u x m × bt m x m min(m) Exemplo: FP(10,4,2,A) ): max(m − m min(m): 0,1 ≤ m < 1 → b−1 ≤ m < 1 → min(m) = b−1 = 0,1 x = 0,1000320, x = fl(x) = 0,1000 → x − x = 0,0000320 < 0,0001 / 2 x = 0,1000784, x = fl(x) = 0,1001 → | x − x | = | −0,0000216|< 0,0001 / 2 x = 0,1000500, x = fl(x) = 0,1000 → x − x = 0,0000500 ≤ 0,0001 / 2 1 1 1 ) ≤ × 0,0001 = × 10− p → max(m − m ) ≤ × b− p max(m − m 2 2 2 u< 1 2 1 × 10 − p × 0,0001 1 −3 = 0,0005 = 0.5 × 10 → u < 2 −1 = × 101−p → u < 0,1 10 2 1 2 × b− p 1 1−p = ×b b−1 2 Matemática Computacional, MEMec, LEAN, MEAer Unidade de arredondamento, u Unidade de arredondamento, u – majorante do erro relativo (possível de ser cometido) na representação dum número × bt m − m max(m − m ) x − x m × bt − m x − x m−m e= = = → max ( e ) = max = max ≤ <u x m × bt m x m min(m) Exemplo: FP(2,24,7,T) min(m): (0,10...0)2 ≤ m < 1 → b−1 ≤ m < 1 → min(m) = b−1 = 2−1 ): max(m − m x = (0,10... 0 010)2 , x = fl(x) = (0,10... 0 )2 → x − x = (0,0... 0 010)2 < (0,000 1 )2 ↑ −24 ↑ −24 ↑ −24 ↑ −24 x = (0,10... 0 101)2 , x = fl(x) = (0,10... 0 )2 → x − x = (0,0... 0 101)2 < (0,000 1 )2 ↑ −24 ↑ −24 ↑ −24 ↑ −24 x = (0,10... 0 111)2 , x = fl(x) = (0,10... 0 )2 → x − x = (0,0... 0 111)2 < (0,000 1 )2 ↑ −24 ↑ −24 ↑ −24 ↑ −24 ) < (0,00...0 1 )2 = 2−24 = 2− p → max(m − m ) < b− p max(m − m ↑ −24 2−24 b− p 2− p 1−24 −23 1− p → u < −1 = b u < −1 = 21−p u < −1 = 2 = 2 2 2 b Matemática Computacional, MEMec, LEAN, MEAer Unidade de arredondamento, u Unidade de arredondamento, u – majorante do erro relativo (possível de ser cometido) na representação dum número × bt m − m max(m − m ) x − x m × bt − m x − x m−m e= = = → max ( e ) = max = max ≤ <u x m × bt m x m min(m) Exemplo: FP(2,24,7,A) min(m): (0,10...0)2 ≤ m < 1 → b−1 ≤ m < 1 → min(m) = b−1 = 2−1 ): max(m − m x = (0,10... 0 010)2 , x = fl(x) = (0,10... 0 )2 → x − x = (0,0... 0 010)2 < (0,000 1 )2 / 2 ↑ −24 ↑ −24 ↑ −24 ↑ −24 x = (0,10... 0 101)2 , x = fl(x) = (0,10... 1 )2 → | x − x |=| −(0,0... 0 011)2 |< (0,000 1 )2 / 2 ↑ −24 ↑ −24 ↑ −24 ↑ −24 x = (0,10... 0 100)2 , x = fl(x) = (0,10... 0 )2 → x − x = (0,0... 0 100)2 ≤ (0,000 1 )2 / 2 ↑ −24 ↑ −24 ↑ −24 ↑ −24 1 1 1 1 ) ≤ × (0,00...0 1 )2 = × 2−24 = × 2− p → max(m − m ) ≤ × b− p max(m − m ↑ 2 2 2 2 −24 1 2−24 1 1−24 1 −23 1 b− p 1 1−p 1 2− p 1 1−p → u < × −1 = × b u < × −1 = × 2 u < × −1 = × 2 = × 2 2 2 2 2 2 b 2 2 2 2 Matemática Computacional, MEMec, LEAN, MEAer Operações elementares em ponto flutuante (FP) Passos a seguir: 1) Decomposição dos operandos nas mantissas e expoentes 2) No caso de soma e subtracção, alinhamento das mantissas 3) Operações com mantissas e com expoentes 4) Normalização da mantissa 5) Arredondamento da mantissa Exemplos em FP(10,4,2,T) Exemplo 1) y = 123,4 + 4,321 → 0,1234 × 103 + 0,4321 × 101 0,1234 ×103 + 0,004321 ×103 0,127721 ×103 fl(y) = y = 0,1277 × 103 Matemática Computacional, MEMec, LEAN, MEAer Operações elementares em ponto flutuante (FP) Passos a seguir: 1) Decomposição dos operandos nas mantissas e expoentes 2) No caso de soma e subtracção, alinhamento das mantissas 3) Operações com mantissas e com expoentes 4) Normalização da mantissa 5) Arredondamento da mantissa Exemplos em FP(10,4,2,T) Exemplo 2) y = 427,3 − 2,183 → 0,4273 × 103 − 0,2183 × 101 0,4273 ×103 − 0,002183 ×103 0,425117 ×103 fl(y) = y = 0,4251 × 103 Nota: se não existirem dígitos de guarda 0,4273 − 0,0021 83 0,4252 ×103 ×103 ×103 fl(y) = y = 0,4252 × 103 Matemática Computacional, MEMec, LEAN, MEAer Operações elementares em ponto flutuante (FP) Passos a seguir: 1) Decomposição dos operandos nas mantissas e expoentes 2) No caso de soma e subtracção, alinhamento das mantissas 3) Operações com mantissas e com expoentes 4) Normalização da mantissa 5) Arredondamento da mantissa Exemplos em FP(10,4,2,T) 8,475 0,8475 × 101 0,8475 1−3 −2 Exemplo 3) y = → = × 10 = 5,478345 × 10 154,7 0,1547 × 103 0,1547 fl(y) = y = 0,5478 × 10 −1 Matemática Computacional, MEMec, LEAN, MEAer Operações elementares em ponto flutuante (FP) Passos a seguir: 1) Decomposição dos operandos nas mantissas e expoentes 2) No caso de soma e subtracção, alinhamento das mantissas 3) Operações com mantissas e com expoentes 4) Normalização da mantissa 5) Arredondamento da mantissa Notas: 1) Existindo dígitos de guarda, a simulação duma operação em FP corresponde a fazermos o cálculo (da operação elementar) e escrever o resultado obtido no formato em FP, arredondando o resultado para o número de dígitos existentes na mantissa. 2) As operações com os expoentes são operações com números inteiros pelo que não introduzem aproximações (operações exactas). 3) As operações em FP, em geral, não respeitam as propriedades comutativas, distributiva e associativa da aritmética exacta. Matemática Computacional, MEMec, LEAN, MEAer Erros nas operações elementares em ponto flutuante (FP) Nota: as operações com os expoentes são exactas, os erros provêm das operações com as mantissas fl(x) = x + E → fl(x) = x + x ⋅ e = x ⋅ (1 + e) E e = E = x ⋅ e x Soma: y = x1 + x2 (x1 e x2 têm o mesmo sinal) x1 + x2 + e1 x1 + e2 x2 + e3 (x1 + x2 ) + ϑ y = fl(x1 + x2 ) = [ x1 ⋅ (1 + e1 ) + x2 ⋅ (1 + e2 )] ⋅ (1 + e3 ) = y arredondamento do argumento arredondamento do resultado termos de ordem superior E = y − y = e1 x1 + e2 x2 + e3 (x1 + x2 ) + ϑ → E ≤ u ⋅ x1 + u ⋅ x2 + u ⋅ x1 + x2 + ϑ (u2 ) → E ≤ 2u ⋅ x1 + x2 + ϑ (u2 ) y e= E y e ≤ 2u + ϑ Matemática Computacional, MEMec, LEAN, MEAer Erros nas operações elementares em ponto flutuante (FP) Nota: as operações com os expoentes são exactas, os erros provêm das operações com as mantissas fl(x) = x + E → fl(x) = x + x ⋅ e = x ⋅ (1 + e) E e = E = x ⋅ e x Multiplicação: y = x1 ⋅ x2 x1 ⋅ x2 + e1 x1 x2 + e2 x1 x2 + e3 x1 x2 + ϑ y = fl(x1 ⋅ x2 ) = [ x1 ⋅ (1 + e1 ) ⋅ x2 ⋅ (1 + e2 )] ⋅ (1 + e3 ) = ... = y arredondamento do argumento arredondamento do resultado E = y − y = e1 x1 x2 + e2 x1 x2 + e3 x1 x2 + ϑ termos de ordem superior → E ≤ 3u ⋅ x1 ⋅ x2 + ϑ y e= E y e ≤ 3u + ϑ Analogamente se conclui para a divisão: e ≤ 3u + ϑ Matemática Computacional, MEMec, LEAN, MEAer Erros nas operações elementares em ponto flutuante (FP) Subtracção: y = x1 − x2 (x1 e x2 têm o mesmo sinal) y = fl(x1 − x2 ) = [ x1 ⋅ (1 + e1 ) − x2 ⋅ (1 + e2 )] ⋅ (1 + e3 ) = x1 (1 + e1 + e3 + ϑ ) − x2 (1 + e2 + e3 + ϑ ) arredondamento do argumento arredondamento do resultado termos de ordem superior = x1 − x2 + e1 x1 − e2 x2 + e3 (x1 − x2 ) + ϑ y E = y − y = e1 x1 − e2 x2 + e3 (x1 − x2 ) + ϑ → E ≤ |e1 ⋅ x1 | + |e2 ⋅ x2 | + |e3 ⋅ (x1 − x2 )| +ϑ → E ≤ u ⋅ x1 + u ⋅ x2 + u ⋅ ( x1 + x2 ) + ϑ (u2 ) e= E E = y x1 − x2 e ≤ 2u x1 + x2 x1 − x2 +ϑ → E ≤ 2u ⋅ ( x1 + x2 ) + ϑ (u2 ) erro absoluto “pequeno” (em relação à grandeza dos argumentos) Se |x1‒x2| for “muito pequeno”, o erro relativo pode ser muito grande -> cancelamento subtractivo Matemática Computacional, MEMec, LEAN, MEAer Erros nas operações elementares em ponto flutuante (FP) Soma: y = x1 + x2 Subtracção: e ≤ 2u + ϑ (u2 ) (x1 e x2 têm o mesmo sinal) e ≤ 2u y = x1 − x2 Multiplicação e divisão: y = x1 ⋅ x2 , y = x1 / x2 | x1 | + | x2 | + ϑ (u2 ) | x1 − x2 | e ≤ 3u + ϑ (u2 ) Matemática Computacional, MEMec, LEAN, MEAer Processos que podem originar acumulação de erros x n Somatório: y= i (xi – números positivos e negativos) i =1 Algoritmo: Inicialização: s0=0 para i=1 até n fazer si=si–1 +xi fim do ciclo i y=sn No caso de os xi possuírem o mesmo sinal é possível estimar um majorante do erro relativo → e ≤ (n + 1) u + ϑ (u2 ) Notar que a ordem pelo qual o cálculo é efectuado não é indiferente Para minimizar o erro, a variável “auxiliar” si pode ser declarada com precisão acrescida. Se não ocorrer cancelamento subtractivo, o erro raramente ultrapassa uma unidade de arredondamento (independentemente do valor de n) Matemática Computacional, MEMec, LEAN, MEAer Processos que podem originar acumulação de erros Produto interno (de vectores): s = x ⋅y = x n i ⋅ yi i =1 Algoritmo: Inicialização: s0=0 para i=1 até n fazer si=si–1 +xi . yi fim do ciclo i y=sn No caso dos termos (xi yi) possuírem o mesmo sinal é possível encontrar um majorante do erro relativo → e ≤ (n + 2) u + ϑ (u2 ) Tal como no caso do somatório, para minimizar o erro, a variável “auxiliar” si pode ser declarada com precisão acrescida Matemática Computacional, MEMec, LEAN, MEAer Norma IEEE754 – formato simples bits -> Formato simples 32 bits = 4 bytes 1 S 8 23 Expoente Mantissa 1 || Formato normalizado x = (−1)S × (d0 , d−1 d−23 )2 × 2e−127 24 bits Expoente: (00000001)2 ≤ e ≤ (11111110)2 ⇔ 1 ≤ e ≤ 254 ⇔ − 126 ≤ e − 127 ≤ 127 Limite de overflow: (1,1111)2 × 2254−127 = (1,1111)2 × 2127 = (2 − 2−23 ) × 2127 2128 3,4 × 1038 Limite de underflow: (1,00 00)2 × 21−127 = (1,00 00)2 × 2−126 = 2−126 1,2 × 10 −38 Limite de underflow gradual: (0,00 0 1 )2 × 2−126 = 2−23 × 2−126 = 2−149 1,4 × 10 −45 ↑ −23 Unidade de arredondamento c/ truncatura: u = b1−p = 21−24 = 2−23 1,2 × 10 −7 1 1 1 Unidade de arredondamento c/ arredondamento: u = × b1−p = × 21−24 = × 2−23 0,6 × 10 −7 2 2 2 Matemática Computacional, MEMec, LEAN, MEAer Norma IEEE754 – formato duplo bits -> Formato simples 64 bits = 8 bytes 1 S 11 52 Expoente Mantissa 1 || Formato normalizado x = (−1)S × (d0 , d−1 d−52 )2 × 2e−1023 53 bits Expoente: (00000000001)2 ≤ e ≤ (11111111110)2 ⇔ 1 ≤ e ≤ 2046 ⇔ − 1022 ≤ e − 1023 ≤ 1023 Limite de overflow: (1,1111)2 × 2+1023 = (2 − 2−52 ) × 2+1023 2+1024 1,8 × 10 +308 Limite de underflow: (1,00 00)2 × 21−1023 = (1,00 00)2 × 2−1022 = 2−1022 2,2 × 10 −308 Limite de underflow gradual: (0,00 0 1 )2 × 2−1022 = 2−52 × 2−1022 = 2−1074 4,9 × 10−324 ↑ −52 Unidade de arredondamento c/ truncatura: u = b1−p = 21−53 = 2−52 2,2 × 10 −16 1 1 1 Unidade de arredondamento c/ arredondamento: u = × b1−p = × 21−53 = × 2−52 1,1 × 10 −16 2 2 2 Matemática Computacional, MEMec, LEAN, MEAer Número de condição Avaliar a propagação de erros: análise directa vs. análise indirecta Análise indirecta – número de condição perturbação de x x x f ( x) f (x ) situação 1 situação bem condicionada f (x) situação mal condicionada situação 2 Dedução de número de condição f (x ) − f (x) f (x) − f (x) f '(x) f '(x) = lim → x → x x − x x − x f (x) − f (x) f '(x) ( x − x ) f (x ) − f (x) x ⋅ f '(x) x − x ⋅ f (x) f (x) x ef cond f ( x ) ex Matemática Computacional, MEMec, LEAN, MEAer Número de condição Ou seja, e f = cond f (x) × ex , cond f (x) x ⋅ f '(x) f (x) cond f(x) representa o factor de ampliação entre o erro relativo do argumento x e o erro do valor da função f(x) Se cond f(x) for grande, então uma perturbação no valor do argumento x é muito ampliada Se cond f(x) ≈ 1 (valor pequeno) – função é bem condicionada Se cond f(x) ≈ 106 (valor “grande” (?)) – função é mal condicionada Nota 1: Se uma função for bem condicionada (num ponto), então deverá existir algoritmo que permita calcular (nesse ponto) o valor da função com precisão. Contudo, podem existir algoritmos que originem imprecisões no cálculo da função. Matemática Computacional, MEMec, LEAN, MEAer Número de condição Nota 2: cond f(x) é “grande” ou “pequeno” dependendo do nosso objectivo e da incerteza dos argumentos Considerar, por hipótese, cond f (x) = 103 → y − y x − x ≈ 103 × y x a) se os erros dos argumentos forem da ordem da representação dos números em computador (por exemplo em formato simples) y − y ≈ 103 × 10 −7 = 10 −4 y erro inferior a 0,01% x − x ≤ u ≈ 10 −7 x erro pequeno (?) (depende da aplicação) b) se os erros dos argumentos forem erros de leitura numa escala (temperatura, distância, velocidade, etc), por exemplo se os erros forem inferiores a 10–4 y − y ≈ 103 × 10 −4 = 10 −1 y erro inferior a 10% erro grande (?) (depende da aplicação) Matemática Computacional, MEMec, LEAN, MEAer