217 pág.

Pré-visualização | Página 6 de 38
Vamos supor que temos um sistema de ponto �utuante dado por F (2, 10,−15, 15). O número inteiro 19 é escrito nesse sistema como: 19β=10 = 10011β=2 = 0, 10011× 25 = 0, 10011× 2101 = ( 1 2 + 0 22 + 0 23 + 1 24 + 1 25 + 0 26 + 0 27 + 0 28 + 0 29 + 0 210 ) × 2101. erros computacionais 25 Observando as expressões anteriores, uma representação compacta pode ser escrita para o número 19. Vemos que podemos tomar a seguinte notação 1 0 0 1 1 0 0 0 0 0 0 1 0 1 Os 10 primeiros algarismos correspondem à mantissa do número e os quatro últimos, após as duas barras, correspondem aos bites necessários para a repre- sentação binária dos números do expoente, que estão no intervalo I ≤ e ≤ S. Vemos que essa notação é su�ciente para expressar um número positivo cujo expoente também é positivo. Para podermos representar, por intermédio dessa mesma notação, qualquer número nesse sistema de ponto �utuante, devemos incluir ainda duas caixas, ou dois bites, para incluirmos os sinais do número e do expoente. Dessa forma, teremos: 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 Na notação estendida, temos o primeiro bite para representar o sinal do nú- mero; se positivo, o dígito é 0; se negativo, o dígito é 1. Na posição 12 da notação, é acrescentado um bite para representar o sinal do expoente. Assim, temos aqui um sistema formado por uma palavra de 16 bites. Supondo ainda o mesmo sistema de ponto �utuante e considerando apenas a notação compacta, podemos perguntar quais seriam o menor e o maior valores numéricos, em termos absolutos, representáveis nesse sistema. As respostas podem ser facilmente encontradas, observando que o maior valor numérico é dado por: 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 De outra forma, esse número corresponde a 0, 1111111111× 21111 = 10∑ k=1 1 2k × 215 = 32736β=10. Como o menor número negativo é obtido nesse caso tomando-se o simétrico, já que o valor mínimo do expoente é I = −15, temos, então, −32736β=10. Por outro lado, o menor número representável em valor absoluto é dado por: 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 Logo, o primeiro número positivo nesse sistema corresponde a 0, 1× 2−1111 = 1 2 × 2−15 = 0, 0000152587β=10. 26 cálculo numérico O primeiro número negativo representável no sistema é −0, 0000152587β=10. Por meio desses exemplos, vemos que os números são representados de forma discreta em um sistema de ponto �utuante. Observamos ainda que, para o sistema em questão, F (2, 10,−15, 15), o intervalo onde estão representados os números, incluindo o zero, é [−32736, 32736]. As regiões compreendidas além desses valores formam o que se chama de região de over�ow, isto é, os intervalos (−∞,−32736) ∪ (32736,+∞). As regiões compreendidas entre o zero e o primeiro número positivo ou nega- tivo são chamadas de regiões de under�ow, ou seja, (−0, 0000152587; 0) ∪ (0; 0, 0000152587). De forma geral, para um sistema de ponto �utuante normalizado F (β, t, I, S), o menor número em valor absoluto é determinado por: m = 0, 1× βI , (1.5) e o maior número representável é determinado por: M = 0, (β − 1)(β − 1) . . . (β − 1)× βS. (1.6) É possível mostrar que a quantidade de números que são representáveis expli- citamente por um sistema de ponto �utuante qualquer é dado pela relação N = 2(S − I + 1)(β − 1)βt−1 + 1. (1.7) Para nosso estudo de caso, F (2, 10,−15, 15), temos N = 31745. Com uma cal- culadora programável ou um sistema de computação algébrica é fácil declararmos uma função para a equação (1.7). Exercício 1.5 Veri�que que a distribuição dos números representados pelo sis- tema de ponto �utuante não é igualmente espaçada. Exercício 1.6 Dado o sistema de ponto �utuante F(2, 3,−1, 2), determine quan- tos e quais são os números representados por esse sistema. erros computacionais 27 1.2.3 Operações aritméticas com ponto �utuante Nessa seção, daremos uma noção de como as operações aritméticas são reali- zadas em um sistema de ponto �utuante. Consideremos dois números escritos em um sistema de ponto �utuante F (β, t, I, S), x = 0, d1d2 . . . dt × βe, y = 0, l1l2 . . . lt × βf . Adição A operação de adição entre dois números é realizada em uma seqüência de passos. 1. Os registros dos números são dispostos da forma a seguir, admitindo-se que x ≥ y. x → d1 d2 · · · dt 0 0 · · · 0 y → l1 l2 · · · lt 0 0 · · · 0 Para determinar o valor de a = x+ y, devemos seguir para o passo 2. 2. Calcule o valor g = e− f . Se g ≥ t, então teremos que a = x, e a operação está concluída. Senão, devemos alinhar o registro do número y de g posições a sua direita, isto é: y → 0 · · · 0 l1 l2 · · · | · · · lt 0 · · · 0 3. Adicione os conteúdos de x e y com g = e. a→ b0 ... b1 b2 · · · bt bt+1 · · · 4. Se tivermos b0 6= 0, então: (i) desloque o registro de a de uma posição à direita; (ii) calcule o valor g → g + 1, e tome o registro a→ 0 ... b1 b2 · · · bt ... bt+1 · · · 28 cálculo numérico 5. Se b1 = 0, então devemos normalizar. (i) desloque à esquerda, até que obtenha b1 6= 0. (ii) calcule g = g − 1 para cada posição deslocada. Teremos: a→ 0 b1 b2 · · · bt bt+1 · · · 6. Se g > S, temos over�ow, e se g < I, temos under�ow. 7. Para arredondamento, cancele os valores de registro de a que estão além da precisão t da máquina. O resultado da operação é dado por: a = x+ y = 0, b1b2 · · · bt × βg. Exemplo 1.10 Sejam x = 0, 1547 × 105 e y = 0, 2748 × 10−1 dois números em decimal com precisão t = 4. Vemos que g = e − f = 5 − (−1) = 6. Então, a = x + y = x = 0, 1547× 105. Na notação de registros, vemos que: x → 1 5 4 7 0 · · · 0 y → 2 7 4 8 0 · · · 0 y′ → 0 0 0 0 0 0 2 7 4 8 a = x + y = x. Exemplo 1.11 Sejam x = 0, 9876×101 e y = 0, 8732×101. Assim, a = x+y = 1, 8608× 101 = 0, 18608× 102 = 0, 1860× 102. Exemplo 1.12 Sejam x = 0, 1012 × 101 e y = −0, 9876 × 10−1. Temos que a = x + y = 0, 1012× 101 − 0, 009876× 101 = 0, 091324× 101 = 0, 91324× 100 = 0, 9132× 100. Multiplicação Sejam dois números x e y em ponto �utuante e seja p = x · y seu produto. A operação de multiplicação realiza-se por meio dos passos: 1. Dispor os números em seus registros x → d1 d2 · · · dt 0 0 · · · 0 y → l1 l2 · · · lt 0 0 · · · 0 erros computacionais 29 2. Calcule p = x · y com expoente g = e+ f . p→ b1 b2 · · · bt bt+1 · · · 3. Se b1 = 0, então normalize, fazendo g → g − 1. p→ b1 b2 · · · bt bt+1 · · · 4. Se g > S, temos over�ow ; se g < I, temos under�ow. 5. Cancele os valores de registro de p que estão além da precisão t. p→ b1 b2 · · · bt 0 · · · 0 Logo, o produto é dado por p = 0, b1b2 · · · bt × βg. Exemplo 1.13 Sejam os números x = 0, 1432 × 101 e y = 0, 4330 × 102. O produto é dado por p = x ·y = 0, 0620056× 103 = 0, 620056× 102 = 0, 6200× 102. Divisão A operação de divisão de dois números em ponto �utuante realiza-se por meio das seguintes etapas. Dados x e y, obtenha o valor q = x y . 1. O primeiro passo é carregar os números em seus registros x → d1 d2 · · · dt 0 0 · · · 0 y → l1 l2 · · · lt 0 0 · · · 0 Se tivermos y = 0, então �m. Senão, 2. Calcule o valor g = e− f e veri�que o registro, q → b0 b1 b2 · · · bt bt+1 · · · 0 3. Se tivermos b0 6= 0, então devemos ajustar q levando em consideração que g → g + 1. 30 cálculo numérico q → 0 ... b1 b2 · · · bt bt+1 · · · 4. Se b1 = 0, então normalize, tomando g → g − 1. q → 0 ... b1 b2 · · · bt bt+1 · · · 5. Se g > S, temos over�ow, e se g < I, temos under�ow. 6. Cancele os valores de q além da precisão t da máquina. Assim, a divisão é dada por: q = x y = 0, b1b2 · · · bt × βg. Exemplo 1.14 Sejam os números x = 0, 5649× 101 e y = 0, 1357× 102. Então, a divisão é dada por: q = x y = 4, 162859× 10−1 = 0, 4162859× 100 = 0, 4162× 100. 1.2.4 Distributividade