TP062-Métodos Numéricos para Engenharia de Produção Erros-Ponto Flutuante Prof. Volmir Wilhelm Curitiba, 2015
Representação Numérica No sistema decimal X (10) = d 3 d 2 d 1 d 0 (número inteiro de 4 dígitos) X (10) = d 3 *10 3 + d 2 *10 2 + d 1 *10 1 + d 0 *10 0 Exemplo de número real fracionário: X (10) = 3.098,323 X (10) = 3*10 3 +0*10 2 +9*10 1 +8*10 0 +3*10-1 +2*10-2 +3*10-3 No sistema binário X (2) = d 3 d 2 d 1 d 0 (número inteiro de 4 dígitos) X (10) = d 3 *2 3 + d 2 *2 2 + d 1 *2 1 + d 0 *2 0 Exemplo de número racional fracionário: X (10) = 30,25 X (2) = 11110,01 X (10) = 1*2 4 +1*2 3 +1*2 2 +1*2 1 +0*2 0 +0*2-1 +1*2-2 2
Representação Numérica 3
A representação geral de um número na base 10 pode ser dada por Ou ainda, por um número y, onde α é o sinal do número (+ ou -) m é a mantissa e é o expoente inteiro Ou ainda, por onde sinal mantissa 10 expoente y = α m 10 e ±(0,d 1 d 2 d 3...d t ) 10 e t é o número de dígitos na mantissa d j {0,1,2,3,4,5,6,7,8,9}, d 1 0 e é o expoente no intervalo [l, u] 4
A representação geral de um número na base 2 pode ser dada por Ou ainda, por um número y, onde α é o sinal de um número (+ ou -) m é a mantissa e é o expoente inteiro Ou ainda, por onde sinal mantissa 2 expoente y = α m 2 e ±(0,b 1 b 2 b 3...b t ) 2 e t é o número de dígitos na mantissa b j {0,1}, b 1 0 e é o expoente no intervalo [l, u] 5
A representação geral de um número na base pode ser dada por Ou ainda, por um número y, onde α é o sinal de um número (+ ou -) m é a mantissa é a base e é o expoente inteiro Ou ainda, por onde sinal mantissa expoente y = α m e ±(0,m 1 m 2 m 3...m t ) e t é o número de dígitos na mantissa; 0 m j ( -1), m 1 0; e o expoente no intervalo [l, u] 6
Precisamos de uma maneira para representar: Números com frações, por exemplo, 3,1415 Números muito pequenos, por exemplo, 0,00000001 Números muito grandes, por exemplo, 3,15576 x 10 9 7
Exemplos de representação em Ponto Flutuante +41 (10) = +101001 (2) = +0,101001 2 6 = +0,101001 2 +110 0 1 0 1 0 0 1 0 0 0 0 0 0 1 1 0 Expoente Sinal do Expoente Valor da Mantissa Sinal da Mantissa (o expoente 8
Exemplos de representação em Ponto Flutuante -1,75 (10) = -1,11 (2) = -0,111 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 +13,625 (10) = +1101,101 (2) = +0,1101101 2 4 0 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0-0,15625 (10) = -0,00101 (2) = -0,101 2-2 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 +39 (10) = +100111 (2) = +0,100111 2 6 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 +0,0130615234375 (10) = +0,0000001101011 (2) = +0,1101011 2-6 0 1 1 0 1 0 1 1 0 0 0 1 0 1 1 0 9
Ponto flutuante (Padrão IEEE 754) (IEEE-Institute Of Electrical And Electronic Engineers) O formato de precisão simples (float) ocupa 32 bits. 1 bit 8 bits 23 bits sinal expoente fração O formato de precisão dupla (double) ocupa 64 bits. 1 bit 11 bits 52 bits sinal expoente fração (PS: O valor do expoente, pelo padrão IEEE 754 é armazenado pela notação com peso, também chamada de notação por excesso de valor.) 10
Aritmética do Ponto Flutuante Os computadores representam números na forma de ponto flutuante. Na aritmética de ponto flutuante o número é representado na forma: onde é a base; t é o número de dígitos na mantissa; 0 d j ( -1), j=1,...,t, d 1 0; e é o expoente no intervalo [l, u] ±(0,d 1 d 2 d 3...d t ) e 11
Aritmética do Ponto Flutuante Ponto Flutuante Exemplo: Seja uma máquina que opera no sistema =10, t=3, e [-5, 5] Os números são representados na forma ±(0,d 1 d 2 d 3 ) 10 e, 0 d j (9), j=1,2,3, d 1 0; Nesta máquina, em módulo, o menor número: m= (0,100) 10-5 = 10-6 maior número: M = (0,999) 10 +5 = 99900 O número x = 235,89=0,23589 10 +3 nesta máquina (que opera com três dígitos) será representado por x = 0,235 10 +3 se for usado o truncamento, e x = 0,236 10 +3 se for usado o arredondamento. Se x > M overflow (por exemplo x=0,267 10-6 ) Se x < m underflow (por exemplo x=0,789 10 7 ) 12
Aritmética do Ponto Flutuante Exemplo: Seja uma máquina com =10, l = 2 e u = 2 e t = 3. Sendo assim temos: 0,35 = 0,0350 10 0-5,172-0,517 10 1 0,0123 = 0,123 10-1 5.391,3 = 0,53913 10 4 overflow 0,0003 = 0,300 10-3 underflow 13
Aritmética do Ponto Flutuante Exemplo: Seja uma máquina com = 10, l = 4, u = 4 e t = 3. x Arredondamento Truncamento 0,002557 0,256 10-2 0,255 10-2 1,250000 0,125 10 1 0,125 10 1 10,053000 0,101 10 2 0,100 10 2-253,150000-0,253 10 3-0,253 10 3 2,718280 0,272 10 1 0,271 10 1 0,000002 underflow expoente < -4 817.235,890000 overflow expoente > +4 14
Formato simples (32 bits ou 4 bytes) Máquina com = 10, l = 38, u = 38 e t = 7. (No computador: Máquina com = 2, l = 126, u = 127 e t = 23 bits) máximo: 0,111111...111 x 2 127 = 0,340 x 10 38 mínimo: 0,100000...000 x 2-126 = 0,218 x 10-38 15
IEEE 754 no Excel, Matlab, Octave formato duplo (64 bits ou 8bytes) Máquina com = 10, l = 308, u = 308 e t = 15. (No computador: Máquina com = 2, l = 1023, u = 1024 e t = 52 bits) máximo: 0,111111...111 x 2 1023 = 0,179769313486232 x 10 308 mínimo: 0,100000...000 x 2-1023 = 0,22250738585072 x 10-308 Exemplo no Excel Digite: A1: 1,2E+200 B1: 1E+100 C1: =A1+B1. O valor resultante na célula C1 será 1,2E+200, o mesmo valor da célula A1. De fato, se comparar as células A1 e C1 usando a função IF, por exemplo, IF (A1=C1), o resultado será VERDADEIRO. Isso é causado pela especificação IEEE ao armazenar somente 15 dígitos significativos de precisão. Para poder armazenar o cálculo acima (exatamente), o Excel solicitará pelo menos 100 dígitos de precisão. (http://support.microsoft.com/kb/78113/pt-br) Exemplo no Excel: (0,5 0,4 0,1) = -0,277555756156289 x 10-017 16