Índice de conteúdos
Índice de conteúdos
Capítulo 2. Representação de Números e Erros..........................................1
1.Representação de números em diferentes bases............................................1
1.1.Representação de números inteiros e conversões de base........................................1
1.1.1.Representação......................................................................................1
1.1.2.Conversão de um número pelo método das divisões sucessivas............................2
1.2.Representação de números reais e conversões de base...........................................2
1.2.1.Representação......................................................................................2
1.2.2.Representação em formato com ponto fixo...................................................3
1.2.3.Conversão de um número em formato com ponto fixo......................................3
1.2.4.Representação em formato com ponto flutuante.............................................4
1.2.5.Conversão de um número em formato com ponto flutuante...............................4
1.2.6.Aritmética de ponto flutuante...................................................................5
1.3.Conversão de números inteiros da base b para a base decimal..................................7
1.3.1.Algoritmo de Horner...............................................................................8
1.3.2.Divisão de Ruffini...................................................................................9
1.4.Conversão de números fracionários da base b para a base decimal.............................9
1.4.1.Algoritmo de Horner..............................................................................10
1.4.2.Divisão de Ruffini.................................................................................10
1.5.Número binário infinito................................................................................11
1.6.Operações com números binários....................................................................12
1.6.1.Adição binária.....................................................................................12
1.6.2.Subtração binária.................................................................................13
1.6.3.Multiplicação binária.............................................................................14
1.6.4.Divisão binária.....................................................................................15
2.Representação de números em computadores digitais...................................15
2.1.Representação de números inteiros.................................................................15
2.1.1.Representação em Sinal-Módulo................................................................15
2.1.2.Representação em Complemento..............................................................17
2.2.Representação de números reais.....................................................................20
-i-
Índice de conteúdos
3.Análise e representação de erros.............................................................24
3.1.Fontes de erros e incertezas..........................................................................24
3.2.Precisão e exatidão.....................................................................................25
3.3.Tipos de erros...........................................................................................25
3.3.1.Erros de modelação (ou de formulação)......................................................25
3.3.2.Erros iniciais (incertezas dos dados do modelo).............................................25
3.3.3.Erro grosseiro......................................................................................26
3.3.4.Erro de arredondamento........................................................................26
3.3.5.Erro de truncatura................................................................................26
3.4.Valores aproximados e erros..........................................................................27
3.4.1.Erro absoluto......................................................................................27
3.4.2.Erro relativo.......................................................................................28
3.4.3.Fórmula fundamental dos erros................................................................28
3.4.4.Número de dígitos significativos...............................................................30
3.5.Erros de arredondamento.............................................................................31
3.5.1.Arredondamento por defeito (ou corte do número)........................................32
3.5.2.Arredondamento simétrico......................................................................33
3.5.3.Erros de arredondamento na álgebra de ponto flutuante..................................34
3.5.3.1.Adição........................................................................................35
3.5.3.2.Subtração....................................................................................35
3.5.3.3.Multiplicação................................................................................36
3.5.3.4.Divisão........................................................................................36
3.6.Erros de truncatura.....................................................................................36
3.6.1.Cálculo de valores de funções transcendentes..............................................36
3.6.2.Discretização......................................................................................37
3.6.3.Métodos iterativos................................................................................38
3.7.Condicionamento e estabilidade.....................................................................40
3.8.Análise de erros.........................................................................................40
3.9.Conclusão................................................................................................41
- ii -
Representação de Números e Erros
Capítulo 2. Representação de Números e Erros
Neste capítulo serão considerados alguns aspetos básicos relativos ao cálculo numérico, como as
representações de números inteiros e reais em código binário, e a análise e representação dos erros
que podem ocorrer em consequência do uso das referidas representações de números.
1. Representação de números em diferentes bases
Nesta secção serão discutidos alguns métodos para a mudança de base na representação de
números inteiros e reais. É comum, para grande parte dos computadores atuais utilizados na
implementação computacional, o uso de uma base numérica distinta da base decimal. Em geral, os
números são armazenados na base 2 (binária), existindo ainda plataformas que os armazenam na
base 8 (octal) ou na base 16 (hexadecimal). A representação de números inteiros é ligeiramente
distinta da representação de números reais.
1.1. Representação de números inteiros e conversões de base
1.1.1. Representação
De uma forma geral, um número inteiro N é representado, na base b, por um conjunto de dígitos
ai, em que ai = 0,1,…, b-1 e i assume um intervalo de valores determinado pela base em uso.
A tabela seguinte indica estes valores para as bases mais utilizadas, inclusive para a base decimal.
b
ai
2
8
10
16
0,1
0, 1, 2, 3, 4, 5, 6, 7
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A. B, C, D, E, F
Há no mínimo duas formas de se representar um número inteiro N: o sistema posicional e a
forma polinomial.
No sistema posicional os dígitos são agrupados na forma de uma sequência, na qual a magnitude
da contribuição de cada dígito no número depende da posição relativa que este ocupa. Neste
sistema, o número N é escrito da seguinte forma:
N = (an an-1 ... a1 a0)b
-1-
Representação de números em diferentes bases
Na forma polinomial fica claramente explicitada a contribuição de cada dígito para o valor de
N, onde um número N é escrito da seguinte forma:
N = an bn + an-1 bn-1 + ... + a1 b + a0
Até aqui, N tem sido tratado de uma forma abstrata. No entanto, por uma questão evolutiva, N
tende a ser visto como um número na base 10 (decimal),
N = (an an-1 ... a1 a0)  an an-1 ... a1 a0
Caso se passe a representar N sempre na base decimal, então deve-se abordar as outras
representações do ponto de vista de conversões "de" ou "para" a base 10.
1.1.2. Conversão de um número pelo método das divisões sucessivas
Começa-se por considerar a conversão de um inteiro da base decimal (b = 10) para a base binária
(b = 2), uma vez que esta será a representação mais provável num computador. Para se realizar
esta conversão de uma maneira prática, pode-se usar o método das divisões sucessivas, no qual N
e os sucessivos quocientes qi são divididos por 2, sendo guardados os restos r i  { 0, 1 } até que o
último quociente seja qn = 1:
N = 2 q1 + r0; q1 = 2 q2 + r1; q2 = 2 q3 + r2; ... ; qn-1 = 2 qn + rn-1
O último quociente somente será 0 se N = 0 (qn = 0  N = 0). Então,
N = (qn rn-1 ... r1 r0)2 (sistema posicional)
N = qn 2n + rn-1 2n-1 + rn-2 2n-2 + ... + r1 21 + r0 20 (forma polinomial)
O mesmo método pode também ser utilizado para converter um número inteiro em decimal N
para qualquer base b; divide-se N e os sucessivos quocientes q i por b, guardando-se os restos
ri  { 0, ..., b-1 } até que o último quociente seja um inteiro qn  { 1, ..., b-1 }:
N = b q1 + r0; q1 = b q2 + r1; q2 = b q3 + r2; ... ; qn-1 = b qn + rn-1
O último quociente somente será 0 se N = 0 (qn = 0  N = 0). Então,
N = (qn rn-1 ... r1 r0)b (sistema posicional)
N = qn bn + rn-1 bn-1 + rn-2 bn-2 + ... + r1 b1 + r0 b0 (forma polinomial)
1.2. Representação de números reais e conversões de base
1.2.1. Representação
Neste momento, é importante conhecer como os números reais podem ser armazenados num
computador. Um número pode ser representado de duas formas/formatos:
➔ com ponto fixo (por exemplo, 12.34);
➔ com ponto flutuante ou vírgula flutuante (por exemplo, 0.1234x10 2).
-2-
Representação de números em diferentes bases
1.2.2. Representação em formato com ponto fixo
Na representação de um número real X no formato com ponto fixo, este possui uma parte inteira
Xi e uma parte fracionaria Xf, tal que Xf = X – Xi. Por exemplo, para X = 12.34, Xi = 12 e Xf = 0.34.
1.2.3. Conversão de um número em formato com ponto fixo
Nesta caso, considera-se apenas a conversão de um real da base decimal para a base binária,
sendo depois facilmente extensível para uma base qualquer. Dado um número real X, este possui
uma parte inteira Xi e uma parte fracionaria X f. Para se converter este número X na base binária
utiliza-se o método das divisões sucessivas, para converter Xi (ver secção 1.1.2), enquanto que para
converter Xf usa-se o método das multiplicações sucessivas.
O método das multiplicações sucessivas consiste em multiplicar-se Xf por 2, extraindo-se a parte
inteira do resultado (a qual pode ser 0); o restante é novamente multiplicado por 2, repetindo-se o
processo até que o resto fracionário seja 0 ou que se obtenha um padrão repetitivo, em cujo caso o
número fracionário será periódico. Este método será ilustrado com dois exemplos.
Exemplo 1:
Seja Xf = 0.8125; então
0.8125 x 2 = 1.6250; 0.6250 x 2 = 1.2500; 0.2500 x 2 = 0.5000; 0.5000 x 2 = 1.0000
Ou seja,
0.8125 = (0.1101)2 .
Exemplo 2:
Seja Xf = 0.1; então
0.1 x 2 = 0.2; 0.2 x 2 = 0.4; 0.4 x 2 = 0.8; 0.8 x 2 = 1.6; 0.6 x 2 = 1.2; 0.2 x 2 = 0.4; ...
e o processo de multiplicações sucessivas repete a sequencia de dígitos 0011 ad infinitum.
Portanto,
0.1 = (0.0001100110011...)2 .
Este exemplo mostra a dificuldade em se obter a representação de um número fracionário numa
outra base.
Estes exemplos mostram que num computador, onde o espaço para representação de um número
é finito, estes números terão que ser arredondados.
A forma polinomial de um número fracionário na base 2 é dada por:
Xf = 1 2-1 + 2 2-2 + 3 2-3 + ...
Portanto, um número real X = Xi + Xf pode ser representado na base 2 por
X = an 2n + an-1 2n-1 + an-2 2n-2 + ... + a1 21 + a0 20 + 1 2-1 + 2 2-2 + 3 2-3 + ...
X = (an an-1 ... a1 a0 . 1 2 3 ...)2.
-3-
Representação de números em diferentes bases
1.2.4. Representação em formato com ponto flutuante
A forma geral de representação de um número real em formato com ponto flutuante é
semelhante à notação científica:
 . d1 d 2 d 3 ... dp × be ,
onde dk (k = 1, 2, ..., p) são os dígitos da parte fracionária (com d k  { 0, ..., b-1 } e d 1 ≠ 0 (se
normalizado), b é o valor da base (geralmente 2, 10 ou 16), p é o número de dígitos e e é um
expoente inteiro. Deste modo, um número em formato com ponto flutuante é composto por três
partes: o sinal, a parte fracionária (denominada também de significando ou mantissa) e o
expoente. Estas três partes têm um comprimento total fixo que depende do computador e do tipo
de número: precisão simples, dupla ou estendida.
1.2.5. Conversão de um número em formato com ponto flutuante
Seja um hipotético computador com dois dígitos (p = 2), base b = 2 e expoente e  { -1, 0, 1, 2 }.
Como os números reais são normalizados, isto é, d1 ≠ 0, todos eles serão da forma:
 .10 2 × 2e
ou
 .112 × 2e , e =−1, 0, 1,2.
Considerando a conversão de binário para decimal de um número menor do que 1,
 .10 2 = 1 × 2−1 + 0 × 2−2 = 1/2 + 0 = 1/ 2, e
 .112 = 1 × 2−1 + 1 × 2−2 = 1/2 + 1/4 = 3/ 4,
então, os únicos números positivos representáveis neste computador são:
 .10 2 × 2−1 = 1/2 × 1/ 2 = 1/ 4  .112 × 2−1 = 3/ 4 × 1/2 = 3/ 8
 .10 2 × 20 = 1/2 × 1 = 1/2
 .112 × 20 = 3/ 4 × 1 = 3/ 4
 .10 2 × 21 = 1/ 2 × 2 = 1
 .112 × 21 = 3/ 4 × 2 = 3/2
 .10 2 × 22 = 1/ 2 × 4 = 2
 .112 × 22 = 3/ 4 × 4 = 3
O zero é representado de uma forma especial: todos os dígitos d k da mantissa e do expoente são
nulos (.002 x 20). O mais importante a reter relativamente aos números em formato com ponto
flutuante é que eles são discretos e não contínuos (como um número real definido na Matemática).
O conceito de existir sempre um número real entre dois números reais quaisquer não é válido
para os números em formato com ponto flutuante. As consequências da falha deste conceito podem
ser desastrosas, como se poderá verificar no exemplo seguinte: considere a representação binária
0.610 = 0.100110011001...2 e 0.710 = 0.1011001100110...2.
Se estes dois números forem armazenados naquele hipotético computador (com dois dígitos para
a mantissa), eles serão igualmente representados por: .10 2 x 20. Isto significa que tanto 0.6 10 como
0.710 são vistos como 0.510 por aquele computador. Esta é uma grande causa de erro de
arredondamento nos processos numéricos, como será visto mais adiante neste documento.
-4-
Representação de números em diferentes bases
Note-se que, como a forma de representação de um número em formato com ponto flutuante
pode ser diferente entre os fabricantes de computadores, um mesmo programa implementado em
computadores que utilizam formatos diferentes pode fornecer resultados diferentes. O formato
utilizado pela maioria dos computadores é o proposto pelo Institute of Electrical and Electronics
Engineers (IEEE), com o padrão IEEE 754 (tabela que se segue, para a base binária).
Propriedade
Comprimento total
bits na mantissa
bits no expoente
sinal
expoente máximo
expoente mínimo
maior número
menor número
dígitos decimais (precisão)
Precisão
Simples
Dupla
Estendida
32
23
8
1
127
-126
 3.40 x 1038
 1.18 x 10-38
7
64
52
11
1
1023
-1022
 1.80 x 10308
 2.123 x 10-308
16
80
64
15
1
16383
-16382
 1.19 x 104932
 3.36 x 10-4932
19
1.2.6. Aritmética de ponto flutuante
Se uma operação aritmética resultar num número que seja maior, em valor absoluto, que o
maior número representável, ocorrerá um overflow. Se, por outro lado, resultar num número que
seja menor, em valor absoluto, que o menor número representável diferente de zero, ocorrerá um
underflow. O modo de tratar overflow e underflow dependerá do compilador utilizado para gerar o
programa executável.
A seguir, será mostrado a precisão das operações numéricas envolvendo números em formato
com ponto flutuante. Para tal, será utilizado um outro hipotético computador com dois dígitos (p =
2), base b = 10 (para facilitar o entendimento) e expoente e  {-5, …, 5}:  .d1d2 x 10e.
Quando dois números são somados ou subtraídos, os dígitos do número de menor expoente
devem ser deslocados de modo a alinhar as casas decimais. O resultado é, então, arredondado para
dois dígitos para caber na mantissa de tamanho p = 2. Depois disto, o expoente é ajustado de forma
a normalizar a mantissa (d1 ≠ 0).
Exemplo 1: 4.32 + 0.064
Os números são armazenados no formato especificado, as casas decimais são alinhadas e a
operação de adição é efetuada; o resultado é então normalizado e arredondado para dois dígitos:
4.32 + 0.064 = .43 x 101 + .64 x 10-1 = .43
x 101
+ .0064
x 101
= .4364
x 101
 .44
x 101.
O resultado da adição é 4.4 em vez de 4.384.
-5-
Representação de números em diferentes bases
Exemplo 2: 372 - 371
Os números são armazenados no formato especificado, as casas decimais são alinhadas e a
operação de adição é efetuada; o resultado é então normalizado e arredondado para dois dígitos:
372 - 371 = .37 x 103 - .37 x 103
= .37
x 103
- .37
x 103
= .00
x 103
 .00
x 100.
O resultado da subtração é 0 em vez de 1. A perda de precisão quando dois números
aproximadamente iguais são subtraídos é a maior fonte de erro nas operações de ponto flutuante.
Exemplo 3: 691 + 2.71
Os números são armazenados no formato especificado, as casas decimais são alinhadas e a
operação de adição é efetuada; o resultado é então normalizado e arredondado para dois dígitos:
691 + 2.71 = .69 x 103 + .27 x 101 = .69
x 103
+ .0027
x 103
= .6927
x 103
 .69
x 103.
O resultado da adição é 690 em vez de 693.71. O deslocamento das casas decimais de 2.71 causou
uma perda total dos seus dígitos durante a operação.
Exemplo 4: 1234 x 0.016
Os números são armazenados no formato definido e a multiplicação é efetuada utilizando 2p = 4
dígitos na mantissa; o resultado é então normalizado e arredondado para dois dígitos:
1234 x 0.016 = .12 x 104 x .16 x 10-1 = .12
x 104
x .16
x 10-1
= .0192
x 103
 .19
x 102.
O resultado da multiplicação é 19 em vez de 19.744.
Exemplo 5: 875 x 3172
Os números são armazenados no formato definido e a multiplicação é efetuada utilizando 2p = 4
dígitos na mantissa. O resultado é então normalizado, arredondado e, como o expoente e = 7 > 5
(máximo definido para este hipotético computador), então ocorre overflow:
875 x 3172 = .88 x 103 x .32 x 104 = .88
x 103
x .32
x 104
= .2816
x 107
 overflow (e  {-5, …, 5}).
O resultado obtido é superior ao maior número representável por este computador (e  {-5, …, 5}).
-6-
Representação de números em diferentes bases
Exemplo 6: 0.00183  492
Os números são armazenados no formato definido e a divisão é efetuada utilizando 2p = 4 dígitos
na mantissa, o resultado é então normalizado e arredondado para dois dígitos:
0.00183  492 = .18 x 10-2  .49 x 103 = .18
x 10-2
 .49
x 103
= .3673
x 10-5
 .37
x 10-5.
O erro relativo desse resultado foi de aproximadamente 0,52%.
Exemplo 7: 0.0064  7312
Os números são armazenados no formato definido e a divisão é efetuada utilizando 2p = 4 dígitos
na mantissa. O resultado é então normalizado, arredondado e, sendo o expoente e = -6 < -5, então
ocorre underflow:
0.0064  7312 = .64 x 10-2  .73 x 104 = .64
x 10-2
 .73
x 104
= .8767
x 10-6
 underflow (e  {-5, …, 5}).
O resultado da divisão é um valor inferior ao menor número representável por este comutador (por
definição, e  {-5, …, 5}), sem considerar o zero, que tem uma representação especial.
Uma das causas de se cometer erros quando se usa um computador deve-se à conversão de base.
Geralmente, um número é fornecido ao computador na base 10 e, no entanto, ele é armazenado na
base 2.
Quando os números são inteiros, a representação é exata, como, por exemplo, 44 10 = 1011002.
No entanto, um número com parte decimal pode resultar num número binário com infinitos dígitos
(0.410 = 0.01100110...2) que tem que ser arredondado para ser armazenado em formato com ponto
flutuante.
1.3. Conversão de números inteiros da base b para a base decimal
Para introduzir a conversão para a base decimal, será usada novamente a base binária como
primeiro exemplo. Seja o número N, representado na base binária por
N = (am am-1 ... a1 a0)2
a sua representação na base decimal pode ser obtida simplesmente pela soma do polinómio
N = am 2m + am-1 2m-1 + ... + a1 2 + a0
A operacionalização desta soma pode ser obtida pelo Algoritmo de Horner e pela Divisão de Ruffini.
-7-
Representação de números em diferentes bases
1.3.1. Algoritmo de Horner
O número N pode ser obtido na base decimal através do cálculo da sequência:
bm
=
am
bm-1 =
am-1 + 2 x bm
bm-2 =
am-2 + 2 x bm-1
...
...
b1
=
a1 + 2 x b 2
b0
=
a0 + 2 x b 1
e então,
N = b0
Exemplo: seja o número (11101)2.
Aplicando o algoritmo de Horner:
b 4 = a4
= 1
b 3 = a3 + 2 x b 4 = 1 + 2 x 1 = 3
b 2 = a2 + 2 x b 3 = 1 + 2 x 3 = 7
b1 = a1 + 2 x b2 = 0 + 2 x 7 = 14
b0 = a0 + 2 x b1 = 1 + 2 x 14 = 29
portanto,
(11101)2 = 2910
Esta metodologia pode ser generalizada para converter qualquer número inteiro na base b para a
base decimal. Considere o número
N = (am am-1 ... a1 a0)b
a sua representação na base decimal pode ser obtida da seguinte forma:
cm
= am
cm-1 = am-1 + b x cm
cm-2 = am-2 + b x cm-1
...
...
c1
= a1 + b x c2
c0
= a0 + b x c1
e então,
N = c0
-8-
Representação de números em diferentes bases
1.3.2. Divisão de Ruffini
É equivalente ao método anterior, diferindo apenas na disposição dos coeficientes a i e bi:
am
2
bm
am-1
...
a2
a1
a0
2 x bm
...
2 x b3
2 x b2
2 x b1
bm-1
...
b2
b1
b0
e então,
N = b0
Exemplo: seja o número (11101)2.
Aplicando a Divisão de Ruffini:
a4
a3
a2
a1
a0
1
1
1
0
1
2 x b4
2x1
2 x b3
2x3
2 x b2
2x7
2 x b1
2 x 14
b3
3
b2
7
b1
14
b0
29
2
b4
1
portanto,
(11101)2 = 2910
Esta metodologia pode ser generalizada para converter qualquer número inteiro na base b para a
base decimal. Considere o número
N = (am am-1 ... a1 a0)b
a sua representação na base decimal pode ser obtida da seguinte forma:
am
b
cm
am-1
...
a2
a1
a0
b x cm
...
b x c3
b x c2
b x c1
cm-1
...
c2
c1
c0
e então,
N = c0
1.4. Conversão de números fracionários da base b para a base decimal
Considere um número fracionário com representação finita na base binária:
Xf = (0.a1a2…an)2 .
O seu valor na base decimal será dado por
Xf = 1 2-1 + 2 2-2 + … + n 2-n
Esta soma pode ser calculada diretamente ou utilizando qualquer um dos dois métodos enunciados
na secção anterior (Algoritmo de Horner e Divisão de Ruffini) com algumas modificações.
-9-
Representação de números em diferentes bases
1.4.1. Algoritmo de Horner
No caso de um número fracionário na base 2, o algoritmo fica
bn
= an
bn-1 = an-1 + (1/2) x bn
bn-2 = an-2 + (1/2) x bn-1
...
...
b2
= a2 + (1/2) x b3
b1
= a1 + (1/2) x b2
b0
= (1/2) x b1
e então,
N = b0
Exemplo: converter o número (0.10111)2.
Aplicando o algoritmo, fica:
b5 = a5
= 1
b4 = a4 + (1/2) x b5
= 1 + (1/2) = 3/2
b3 = a3 + (1/2) x b4
= 1 + (3/4) = 7/4
b2 = a2 + (1/2) x b3
= 0 + (7/8) = 7/8
b1 = a1 + (1/2) x b2
= 1 + (7/16) = 23/16
b0 = (1/2) x b1
= (1/2) x (23/16) = 23/32
portanto,
(0.10111)2 = 23/32 = 0.71875
1.4.2. Divisão de Ruffini
No caso de um número fracionário na base 2, o algoritmo fica
an
1/2
bn
an-1
...
(1/2) x bm
...
bn-1
...
e então,
N = b0
- 10 -
a2
a1
(1/2) x b3 (1/2) x b2 (1/2) x b1
b2
b1
b0
Representação de números em diferentes bases
Exemplo: Converter o número (0.10111)2 .
Aplicando o algoritmo, fica:
a5
a4
a3
a2
a1
1
1
1
0
1
(1/2) x b5
(1/2) x b4
(1/2) x b3
(1/2) x b2
1/2
(1/2) x 1
(1/2) x (3/2) (1/2) x (3/4) (1/2) x (7/8)
(1/2) x b1
(1/2) x (23/16)
b5
b4
b3
b2
b1
b0
1
3/2
7/4
7/8
23/16
23/32
portanto,
(0.10111)2 = 23/32 = 0.71875
1.5. Número binário infinito
Uma outra situação que pode ocorrer é quando o número binário for infinito, por exemplo,
através de uma sequência de dígitos periódicos:
(
)
X f = 0,α 1 α2 ... αn β1 β2 ...βm
2
onde β1 β 2 ... βm indica que a sequência de dígitos β1 β 2 ... βm se repete ad infinitum. Na base
decimal, tal número é dado por
Xf = 1 2-1 + 2 2-2 + … + n 2-n + b1 2-n-1 + b2 2-n-2 + … + bm 2-n-m +
+ b1 2-n-m-1 + b2 2-n-m-2) + … + bm 2-n-2m +
+ b1 2-n-2m-1 + b2 2-n-2m-2 + … + bm 2-n-3m +
+...
Observa-se que este número pode ser escrito como
Xf = 1 2-1 + 2 2-2 + … + n 2-n + ( b1 2-1 + b2 2-2 + … + bm 2-m ) 2-n +
+ ( b1 2-1 + b2 2-2 + … + bm 2-m ) 2-n-m +
+ ( b1 2-1 + b2 2-2 + … + bm 2-m ) 2-n-2m +
+...
Ou seja,
Xf = 1 2-1 + 2 2-2 + … + n 2-n + ( b1 2-1 + b2 2-2 + … + bm 2-m ) 2-n ( 1 + 2-m + 2-2m + … )
Usando agora a identidade,
1
= 1 + x + x 2 + x 3 + ... (para |x| < 1)
1−x
tem-se
1 + 2−m + 2−2m + 2−3m + ... =
2m
(fazendo x = 2-m),
=
1 −2−m
2m−1
1
- 11 -
Representação de números em diferentes bases
obtendo-se
(
) (
X f = α 1 2−1 + α2 2−2 + ... + α n 2−n + β 1 2−1 + β2 2−2 + ... + β m 2−m
)
2m−n
2m−1
As duas expressões entre parênteses têm a mesma forma e podem ser calculadas diretamente ou
usando qualquer um dos métodos descritos anteriormente.
Em geral, se o número fracionário tem representação infinita periódica na base b,
(
) (
X f = α 1 b−1 + α 2 b−2 + ... + α n b−n + β1 b−1 + β2 b−2 + ... + βm b−m
)
bm−n
b m−1
onde as expressões entre parênteses podem ser calculadas diretamente ou utilizando qualquer um
dos métodos descritos anteriormente.
1.6. Operações com números binários
Como a maioria dos computadores usa a base b = 2, então estes executam operações aritméticas
com números que estão na representação binária. Para executar estas operações, as tabelas de
operações que se seguem são automaticamente satisfeitas.
1.6.1. Adição binária
Uma adição no sistema binário é realizada da mesma forma que a adição no sistema decimal,
lembrando que, no sistema binário, há apenas 2 dígitos. Esta operação é realizada de acordo com
as seguintes regras (considerando os dois operandos positivos):
0+0=0
0+1=1
1+0=1
1 + 1 = 0 (e “vai 1” para o dígito de ordem superior)
1 + 1 + 1 = 1 (e “vai 1” para o dígito de ordem superior)
Para somar números com mais de 2 algarismos, utiliza-se o mesmo processo de transporte para a
coluna posterior, usado na adição decimal. Ter, no entanto, atenção aos limites das palavras.
Exemplo 1: 1012 + 0112 = 10002 (510 + 310 = 810)
[1]
+
[1]
1
0
[1]
0
1
1
1
1
0
0
0
- 12 -
Representação de números em diferentes bases
Exemplo 2: 012 + 112 = 1002 (110 + 310 = 410)
[1]
+
[1]
0
1
1
1
1
0
0
Exemplo 3: 10102 + 11112 = 110012 (1010 + 1510 = 2510)
[1]
+
[1]
1
1
[1]
0
1
1
1
0
1
1
1
0
0
1
Quando um dos operandos são números binários negativos, o processo a aplicar é o seguinte:
➔ dois operandos negativos: adicionam-se os dois considerando o valor absoluto de cada um
deles e atribui-se o sinal de negativo;
➔ um deles é negativo: verifica-se qual dos dois tem maior valor absoluto, subtraí-se o menor
valor absoluto ao maior e, atribui-se o sinal do maior em valor absoluto.
1.6.2. Subtração binária
A subtração é análoga à adição, sendo realizada de acordo com as seguintes regras:
0-0=0
0 - 1 = 1 (e “pede emprestado 1” para o dígito de ordem superior)
1-0=1
1-1=0
Desta forma, a operação 0 - 1 resulta em 1, mas com o transporte de 1 para a coluna à esquerda,
que deve ser acumulado ao subtraendo e, por consequência, subtraído do minuendo (em a-b, a o
minuendo e b é o subtraendo).
Exemplo 1: 1012 - 0112 = 0102 (510 - 310 = 210)
-
[1]
1
0
0
1
1
1
0
1
0
Exemplo 2: 1112 - 1002 = 0112 (710 - 410 = 310)
-
1
1
1
0
1
0
0
1
1
- 13 -
Representação de números em diferentes bases
Exemplo 3: 10102 - 10012 = 00102 (1010 - 910 = 110)
-
1
1
0
0
[1]
1
0
0
0
0
0
1
1
1.6.3. Multiplicação binária
Procede-se como numa multiplicação no sistema decimal, de acordo com as seguintes regras:
0x0=0
0x1=0
1x0=0
1x1=1
Utiliza-se o mesmo método que a multiplicação decimal: deslocamentos e adições. O número
maior deve ser colocado por cima do menor.
Exemplo 1: 1012 x 0112 = 0102 (510 x 310 = 1510)
+
x
1
0
0
1
1
1
0
1
1
0
1
0
1
0
0
0
1
1
1
1
Exemplo 2: 110102 x 0102 = 1101002 (2610 x 210 = 5210)
+
1
1
x
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
0
0
1
1
0
1
0
0
Exemplo 3: 10102 x 10002 = 10102 (1010 x 810 = 8010)
+
x
1
1
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
1
0
0
0
0
- 14 -
Representação de números em diferentes bases
1.6.4. Divisão binária
A divisão binária usa o mesmo método que a divisão decimal: deslocamento e subtrações.
Exemplo 1: 1010102  1102 = 1112 (4410  410 = 1110)
[1] [1]
[1]
1 0
- 1
0
1
1
0
0
1
1
-
0
1
0
1
1
0
0
0
-
1
1
0
1
1
0
0
1
1
1
1
0
1
0
0
0
2. Representação de números em computadores digitais
Nesta secção serão apresentadas algumas das representações usadas para armazenar números
inteiros e reais na memória de um computador. As representações de números inteiros e reais
apresentadas na secção anterior não são suficientes, pois é necessário distinguir-se, por exemplo, o
sinal do número. Como não existe a representação de um sinal '+' ou '-' na memória de um
computador, o recurso utilizado é acrescentar um bit, para computadores binários, ao número para
representar o sinal; este bit é denominado bit de sinal.
2.1. Representação de números inteiros
Para representar um número inteiro num computador digital, existem várias formas, tais como a
representação em Sinal-Módulo e em Complemento à base.
2.1.1. Representação em Sinal-Módulo
A representação mais direta de números inteiros é a denominada Sinal-Módulo (também
denominada por Sinal-Magnitude). Nesta representação, o valor absoluto do número inteiro é
obtido diretamente a partir dos algoritmos discutidos na secção anterior, enquanto que o sinal é
representado por um dígito adicional colocado à esquerda do número.
Quando a representação é binária, o bit de sinal ocupa a posição do bit mais significativo.
Supondo que a memória do computador dispõe de q dígitos para a representação, um número
inteiro na base b será representado no computador através da seguinte sequência de dígitos:
aq-1 aq-2 ...a1 a0
sendo { a0, a1, …, aq-2, aq-1 }  { 0, 1, …, b-2, b-1 } em que aq-1 representa o sinal do número. Esta
sequência de dígitos é denominada palavra. Por exemplo, no sistema binário convenciona-se usar
aq-1 = 0 para “+” e aq-1 = 1 para “-”.
- 15 -
Representação de números em computadores digitais
A conversão do número internamente representado por a q-1 aq-2 ...a1 a0 para o sistema decimal é
realizado através de uma fórmula semelhante à forma polinomial:
a q−1
N = (−1)
q−2
×
∑ ( ak × bk ),
k=0
em que,
N o número inteiro na base decimal
q-2 é o índice do dígito mais à esquerda que representa o valor absoluto de N
b a base, às vezes denominada de radix (um inteiro maior que 1)
ak um dígito válido na representação (ak  { 0, ..., b-1 }), k = 0, 1, …, q-2
aq-1  { 0, 1 }) e representa o bit de sinal
Os valores em questão para as quantidades expressas na fórmula anterior dependem da arquitetura
e do compilador utilizado. Por exemplo, um dado compilador possui 4 modelos de representação de
inteiros com 1, 2, 4 e 8 bytes, também denominados de espécies. Sendo para todos os casos b = 2,
o valor absoluto do maior número inteiro que pode ser representado internamente para cada
espécie Npmax , (p = 1, 2, 4, 8) é, a partir da fórmula anterior,
{
127 (p=1)
Npmax = ∑ 2k = 20 + 21 + 22 + ... + 28p−2 = 28p−1 − 1 = 32767 (p=2)
2147483647 (p=4)
k=0
9223372036854775807 (p=8)
8p−2
A forma utilizada mais comum para representar números negativos em binário é tomando o
dígito mais a esquerda que representar o sinal (0 representa sinal positivo e 1 sinal negativo)
-27
26
25
24
23
22
21
20
sinal
Transformando o binário negativo em decimal: soma-se os bits “ligados” (com 1), considerando-se
os valores de -27, 26, …, 20. Exemplos:
1
1
1
1
-128
1
-128
0
1
1
123
1
0
1
-128
1
1
0
-5 (123-128)
1
1
1
87
1
1
1
decimal
decimal
-41 (87-128)
1
1
127
- 16 -
1
1
decimal
-1 (127-128)
Representação de números em computadores digitais
2.1.2. Representação em Complemento
Existem outras representações de números inteiros em computadores, como por exemplo as
representações em complemento a (b-1) e em complemento a b (em que b é a base).
A representação de números positivos em complemento é idêntica à representação em SinalMódulo. A representação dos números inteiros negativos é obtida efetuando-se: (b - 1) menos cada
algarismo do número. Por exemplo, para calcular o complemento a (b - 1) do número -29710 (como
a b = 10, então o complemento a (b -1) será complemento a 9); como 999 - 297 = 702, o
complemento a 9 do número -297 é 702.
Para se obter o complemento a (b – 1) de um número binário, deve-se subtrair cada algarismo de
1 (b - 1 = 1); no entanto, como se trata de números binários, para efetuar esta operação basta
inverter todos os bits. Por exemplo, o complemento a 1 (C1) do número 0011 2 (usando 4 dígitos) é
11002, pois 11112 – 00112 = 11002.
A quantidade de números inteiros diferentes que se podem representar usando n posições num
sistema de base b é bn. Por exemplo, na base 2, podem-se representar os seguintes números: 21 até
um dígito (0, 1), 22 até dois dígitos (00, 01, 10, 11), 2 3 números até três dígitos (000, 001, 010, 011,
100, 101, 110, 111), …
A tabela seguinte apresenta a representação em C1 dos números binários de 4 dígitos. Repare
como o espaço de representação da base 2 com 4 dígitos está sendo usado na representação em C1
(note que há 2 representações para o zero).
Decimal
(positivo)
Binário em C1
(igual a sinal-módulo)
Decimal
(negativo)
Binário em C1
0
1
2
3
4
5
6
7
0000
0001
0010
0011
0100
0101
0110
0111
0
-1
-2
-3
-4
-5
-6
-7
1111
1110
1101
1100
1011
1010
1001
1000
A representação na base b = 10 com 3 dígitos varia de 000 a 999 (10 3 representações),
representando os números de -499 a -1 (faixa negativa que está compreendida entre 500 e 998) e
de +1 a +499 (faixa positiva que está compreendida entre 1 e 499). O zero tanto pode ser
representado por 000 como por 999.
A faixa de representação em C1 dos números binários de n dígitos é a seguinte:
➔ menor inteiro negativo: -(2n-1 – 1),
➔ maior inteiro positivo: 2n-1 – 1.
- 17 -
Representação de números em computadores digitais
Na aritmética em complemento a (b - 1), basta somar os números, sendo que um número
negativo será representado por seu complemento a (b – 1).
Por exemplo, a soma decimal de 123 com -418 é:
Sinal-Módulo
-418 + 123 = -295
Complemento a 9 (b - 1)
-418 é representado por 999 - 418 = 581
581 + 123 = 704
999 - 704 = 295, em que 704 é o C9 de -295 (704 está na faixa negativa).
De notar que nesta representação, a subtração (ou soma de um número positivo com um número
negativo) transforma-se numa soma em complemento; isto é, a soma dos complementos do número
positivo com o número negativo. Portanto, uma subtração pode ser realizada simplesmente através
da soma dos números “complementados”: manter o número se é positivo e complementar o número
se é negativo; depois, é só somar.
Desta forma, pode-se constatar que o algoritmo da soma em complemento é muito mais simples
que o da soma em Sinal-Módulo, uma vez que não requer nenhum teste. No entanto, continua-se
com duas representações para o zero.
A representação dos números inteiros negativos em complemento a b é obtida subtraindo-se da
base b cada algarismo do número. Por exemplo, na base b = 10 com 3 dígitos: 1000 – x. Uma forma
alternativa é subtrair cada algarismo de (b – 1), isto é, calcular o complemento a (b -1), e depois
somar 1 ao resultado. Ou seja, encontramos o complemento a (b - 1) do número (o que facilita
muito no caso dos números binários) e depois soma-se 1 ao resultado.
Por exemplo, calcular o complemento a 10 (base = 10) do número 29710 com 3 dígitos:
➔ usando C10: 1000 – 297 = 703;
➔ representar o número em C9 e somar 1 ao resultado: 999 – 297 = 702  702 + 1 = 703.
Por exemplo, calcular o complemento a 2 (base = 2) do número 00112 com 4 dígitos:
➔ usando C2: 10000 – 0011 = 01101;
➔ representar o número em C1 e somar 1 ao resultado: 1111 – 0011 = 1100  1100 + 0001 =
1101.
Desta forma, para representar um número binário negativo em complemento a 2 (C2) consiste
em subtrair cada algarismo de 1 (C1) e depois somar 1 ao resultado.
- 18 -
Representação de números em computadores digitais
A tabela seguinte apresenta a representação em C2 dos números binários de 4 dígitos.
Decimal
(positivo)
Binário em C2
(igual a sinal-módulo)
Decimal
(negativo)
Binário em C2
0
1
2
3
4
5
6
7
0000
0001
0010
0011
0100
0101
0110
-1
-2
-3
-4
-5
-6
-7
-8
1111
1110
1101
1100
1011
1010
1001
1000
0111
Comparando com a tabela anterior (para C1), nota-se que os números positivos têm a mesma
representação de C1 e que o zero passou a ter apenas uma representação, o que permitiu
representar mais um número (neste caso, mais um negativo pode ser representado).
A faixa de representação em C2 dos números binários de n dígitos é a seguinte:
➔ menor inteiro negativo: -2n-1,
➔ maior inteiro positivo: 2n-1 – 1.
Na aritmética em complemento a base, basta somar os números, sendo que um número negativo
será representado pelo complemento a base. Deve-se ter, no entanto, cuidado com a possibilidade
de acontecer overflow. Em qualquer sistema em C2, existe sempre um limite para o tamanho dos
números a serem representados. Por exemplo, quando se usam palavras de 4 bits (um para o sinal),
o valor 9 não tem associado qualquer palavra; por isso não se consegue uma resposta certa para a
soma de 5 com 4 (0101 + 0100 = 1001 que é -7). A adição de dois números no sistema de
representação em C2 segue duas regras:
1. Somar os dois números e observar se ocorre transbordo (vai 1) sobre o bit de sinal e se ocorre
o transbordo após o bit de sinal.
2. Se ocorrer um e somente um dos dois transbordos, então houve overflow; caso contrário o
resultado da soma está dentro do campo de definição.
As vantagens do uso do complemento de 2 é que existe apenas um zero e que as regras para
soma e subtração são as mesmas. A desvantagem é o fato de ser um código assimétrico: o número
de representações negativas é maior que o número de representações positivas. Por exemplo, com
8 bits podem-se representar, em complemento de 2, os números decimais entre -128 e +127.
A representação de um número inteiro num computador é exata. Operações aritméticas entre
números inteiros também é exata, sob as seguintes condições:
a) o resultado não pode encontrar-se fora do intervalo de números inteiros que podem ser
representados;
- 19 -
Representação de números em computadores digitais
b) a divisão somente pode ser realizada entre números exatamente divisíveis, isto é, a parte
fracionária deve ser nula.
2.2. Representação de números reais
A representação de números reais em computadores denomina-se por representação de ponto
flutuante normalizado, na qual um número é representado internamente através de uma notação
científica: um bit de sinal s (interpretado como positivo ou negativo), um expoente inteiro exato e
e uma mantissa inteira positiva M, sendo que apenas um número limitado de dígitos é permitido
para e e M. Tomando todas estas quantidades juntas, estas representam o número
x = s × (0. d1 d2 ... dn ) × be
o qual está escrito numa forma legível para os seres humanos. Além das quantidades já definidas na
fórmula anterior, os dígitos d1, d2, …, dn são limitados pela base b (0  di  b-1, i = 1, …, n e d1  0)
e o expoente é limitado ao intervalo e  { emin, ..., emax }. Para além disso, n ≥ 1 é denominado de
número de dígitos do sistema e define o tamanho da mantissa M = 0.d1d2...dn.
O valor zero não pode ser normalizado e tem representação especial, com mantissa nula (todos
dígitos iguais a zero) e expoente o menor possível (m–1). O conjunto formado pelo zero e por todos
os números em notação de ponto flutuante é chamado Sistema de Ponto Flutuante na base b com
n algarismos significativos, e denota-se por F(b, n, emin, emax).
Contudo, um computador apenas pode representar os valores de e e M através de dígitos na base
b. Um computador digital (b = 2), por exemplo, dispõe sempre de um tamanho de palavra finito,
isto é, o número total de bits que podem ser utilizados para representar o sinal s (1 bit), o
expoente e a mantissa é sempre fixo, para um dado tipo de números reais. Um número real de
precisão simples, por exemplo, é normalmente representado por uma palavra de 4 bytes (32 bits),
sendo que 1 bit é utilizado para representar o sinal, 8 bits são utilizados para representar o
expoente e os restantes 23 bits para representar a mantissa. Desta forma, tal número será
representado na memória do computador como
x = s e 7 e6 ... e 1 e0 d1 d2 ... d22 d23,
em que
s , e0 , ... , e7 , d1 , ..., d 23 ∈ { 0, 1 }.
Exemplo: Considere-se dois números binários com 8 algarismos significativos em F(2, 8, -4, 5):
➔ n1 = 0 010 111001102 => (-1)0 x 22 x (0.11100110) = 3.5937510
➔ n2 = 0 010 111001112 => (-1)0 x 22 x (0.11100111) = 3.60937510 .
Observe que, no sistema de representação utilizado, n1 e n2 são dois números consecutivos, ou
seja, não podemos representar nenhum outro número que tenha valor intermédio. Portanto, por
- 20 -
Representação de números em computadores digitais
exemplo, a quantidade 3.60000 não tem representação exata neste sistema, sendo representada
por n1 ou n2, o que gerará um erro, denominado Erro de Arredondamento. Assim, enquanto os
números reais podem ser representados por uma reta contínua, em notação de ponto flutuante
somente podemos representar pontos discretos da reta real.
A tabela que se segue ilustra representações de ponto flutuante para alguns números numa
palavra típica de 32 bits (4 bytes), em F(2, 23, -128, 127).
binário (base 2)
número decimal
(base 10)
s
expoente de 8 bits
Mantissa de 23 bits
1/2
1/4
1
3
0
0
0
0
00000000 (0)
11111111 (-1)
00000001 (1)
00000010 (2)
10000000000000000000000
10000000000000000000000
10000000000000000000000
11000000000000000000000
A conversão do número x representado na base binária para a base decimal pode ser realizada
pela seguinte fórmula polinomial:
s
e
x = (−1) × b ×
n
∑ ( dk × b−k ).
k=1
No padrão IEEE 754, a sequência de 8 bits armazena o número E = e + 127. Desta forma, evita–se
o teste sobre o valor do bit para saber se o número é positivo ou negativo e, para recuperar o
expoente, é realizada a operação e = E − 127. Para se obter a forma como o expoente será
armazenado pode-se também trabalhar na base 10 e converter depois o resultado final. Por
exemplo, se e = 5210 vai-se armazenar 12710 + 5210 = 17910 = 101100112.
É importante destacar que as sequências de bits para o expoente "00000000" e "11111111" são
reservadas para representar o zero e infinito (ou ocorrência de erro, NaN: not a number)
respetivamente. O maior expoente é representado pela sequência 11111110 2 que, na base 10,
representa o número (256 − 2)10 = 25410. Então o maior expoente é: 127 + e = 254 ⇒ e = 254 − 127 =
127. O menor expoente é representado pela sequência 00000001 2 = 110. Daí que o menor expoente
é: 127 + e = 1 ⇒ e = 1 − 127 = −126.
Considerando agora a representação da mantissa. Como no sistema normalizado d 1 ≠ 0 e dado
que a base é 2, então primeiro dígito no sistema normalizado será sempre igual a 1 e por esta razão
não é armazenado (é o denominado bit escondido). Esta normalização permite um ganho na
precisão, pois pode-se considerar que a mantissa é armazenada em 24 bits.
- 21 -
Representação de números em computadores digitais
A tabela seguinte mostra os valores de n, e min, emax, Xmin, Xmax e Xeps para um dado computador
que usa o padrão IEEE 754.
Espécie
REAL (4)
REAL (8)
REAL (10)
n
Xmin
23
-126
127
1.1754944 x 10-38
52
-1022
1023
2.225073858507201 x 10-308
64
-16382
16383
3.362103143112093506... x 10-4932
Xmax
3.4028235 x 1038
1.797693134862316 x 10308
1.189731495357231765... x 104932
Xeps
1.1920929 x 10-7
2.220446049250313 x 10-16
1.925929944387235853... x 10-34
emin
emax
Para uma base b qualquer, os números do sistema de ponto flutuante F = F(b, n, e min, emax)
contêm as seguintes características:
➔ O menor número positivo que pode ser representado neste sistema é
e min
x min = 0.1 × b
.
Valores para xmin válidos para o compilador são apresentados na tabela anterior. Isto significa
que qualquer número x tal que
−x min < x < x min
não poderá ser representado pelo computador. Esta ocorrência é denominada de underflow.
Os compiladores podem ser instruídos para terminar o processamento neste ponto,
disparando uma mensagem de erro, ou então seguir o processamento arredondando x = 0.
➔ O maior número positivo que pode ser representado neste sistema é
x max = 0.(b−1)(b−1)...(b−1) ×b
e max
( )
n
= (b−1)
n vezes
∑ b−k
b
emax
= (b−1)( 1 − b−n ) b
emax
k=1
Isto significa que qualquer número x tal que
x < -xmax ou x > xmax
não poderá ser representado pelo computador. Esta ocorrência é denominada overflow. Os
compiladores usualmente tomam duas possíveis providências quando detetam um overflow:
param o processamento do programa emitindo uma mensagem de erro, ou continuam o
processamento atribuindo a x o valor simbólico x = -Infinito ou x = Infinito.
➔ O maior número que pode ser somado ou subtraído a 1.0, tal que o resultado permanece
inalterado (isto é, a diferença entre 1.0 e o número que lhe sucede em F), é
x eps = 0.10 ... 01 × b1 − 0.1 0... 0 0 × b1 = b1−n
n vezes
n vezes
em que xeps é denominada de epsilon da máquina, ϵ, ou de precisão da máquina.
O epsilon da máquina, ϵ, também pode ser definido como o menor número de ponto
flutuante, tal que: 1 + ϵ > 1.
- 22 -
Representação de números em computadores digitais
Esta quantidade que, como se pode ver, depende da base e do número de algarismos da
mantissa, é da maior importância na análise de erros de arredondamento, como se verá mais
adiante.
De uma forma mais geral, para um número em ponto flutuante x ∈ F define-se
ulp(x) = (0.00...01)b x be = b-n x be =  x be.
Em que ulp é a abreviatura para unit in the last place.
Se x > 0, então ulp(x) é a distância entre x e o número que lhe sucede em F; se x < 0, então
ulp(x) é a distância entre x e o número que o antecede em F.
Uma aproximação para o epsilon da máquina de um sistema de vírgula flutuante de base b
pode ser calculada usando o seguinte algoritmo e assumindo que o modo de arredondamento
é para o mais próximo:
  1
fazer
  /b
  1+
enquanto ( ≠ 1)
A interpretação deste algoritmo é a seguinte: se x é uma potência negativa de b tal que x < ε
então 1 + x dá 1.
O conhecimento de ε do sistema computacional ou máquina de calcular é fundamental. De
facto, se considerarmos, por exemplo, a equação 1 + x = 1, esta admite muitas soluções em
aritmética de ponto flutuante e não apenas x = 0.
➔ Apenas um conjunto finito RF de números racionais podem ser representados na forma
apresentada. Os números neste conjunto são denominados números de ponto flutuante.
Para uma representação normalizada (d1 ≠ 0), este conjunto contém precisamente
2(b−1) b n−1 emax − emin + 1 + 1
(
)
números racionais.
Exemplo:
Considere o sistema de representação numérica de ponto flutuante F(2, 4, -5, 6). Para este
sistema:
➔ o menor número positivo possível é:
x min = (0.1000)2 × 2−5 = 2−5−1 =
1
64
ou seja, a região de underflow consiste no intervalo
−
1
1
< x <
64
64
- 23 -
Representação de números em computadores digitais
➔ O maior número positivo possível é:
x max = (0.1111)2 × 26 = ( 1 − 2−4 ) × 26 = 60;
ou seja, as regiões de overflow consistem nos intervalos
x < −60 e x > 60.
➔ O maior número que pode ser somado ou subtraído de 1.0 e que mantém o resultado
inalterado é:
1
x eps = 21−4 = 2−3 = .
8
➔ O número de elementos em RF é:
2 × 1 × (6 + 5 + 1) × 24−1 + 1 = 193.
3. Análise e representação de erros
3.1. Fontes de erros e incertezas
Embora se procure sempre soluções “exatas” dos problemas reais, raramente este objetivo é
atingido. Erros e incertezas podem ser introduzidos em cada etapa da formulação e resolução dos
problemas.
Nesta secção será abordada a natureza das incertezas que surgem quando se procura a solução
de um problema. Também serão examinados, com um certo grau de detalhe, os erros introduzidos
pela computação numérica, destinada a determinar a solução desejada.
Na discussão que será feita a respeito das fontes de erros no cálculo numérico, não serão
considerados erros triviais que podem ser evitados, tais como copiar uma fórmula erroneamente ou
efetuar um erro de sintaxe na programação, muito embora tais erros ocorram e perfaçam uma
fração considerável do esforço e do tempo despendidos ao se trilhar as etapas da resolução de um
problema.
Desta forma, esta secção tratará apenas dos erros que resultam de forma inevitável, dada a
própria natureza da representação finita de números num computador e/ou da implementação
numérica de um determinado cálculo.
As incertezas introduzidas contaminam a solução e é importante tentar-se balancear as
incertezas. Se a incerteza no modelo matemático é de 1%, então não faz sentido a implementação
de um modelo numérico e de um método que atinja 6 dígitos de precisão, por exemplo. No decurso
do processo de resolução de um problema, as incertezas ocorrem em todas as fases deste processo
(da modelação matemática à obtenção da solução numérica).
- 24 -
Análise e representação de erros
3.2. Precisão e exatidão
A precisão refere-se ao quão próximo um número representado pelo computador representa o
número que ambiciona representar. A precisão de um número é caracterizada pelo número de
dígitos usados na representação e na álgebra. Assim, a constante  será representada com maior
precisão utilizando 8 bytes do que utilizando 4 bytes, para armazenar o número.
A exatidão refere-se a quão próximo um número representado pelo computador (como resultado
de uma série de operações, por exemplo) está do valor correto do número que ele almeja
representar. A exatidão é caracterizada pelos erros (de truncatura e de arredondamento) no
método numérico utilizado. Assim, se os números 1 = 3.1416304958 e 2 = 3.1415809485 almejam
representar o mesmo número  = 3.141592654… , o número 2 possui maior exatidão do que 1,
embora ambos possuam a mesma precisão.
Os conceitos de precisão e exatidão são muitas vezes confundidos entre si. É frequente, em
linguagem coloquial, referir-se à precisão quando na verdade o correto seria referir-se à exatidão
de um resultado. As subsecções seguintes indicam como se pode medir a exatidão de um número
através do cálculo dos erros absoluto e relativo do mesmo.
3.3. Tipos de erros
Durante as etapas de resolução de um problema, surgem erros de várias origens que podem
alterar profundamente os resultados (soluções) obtidos. É de importância fundamental conhecer as
causas desses erros para minimizar as suas consequências.
Os erros podem-se dividir em dois tipos: a) os erros associados à construção dos modelos
matemáticos e à implementação dos algoritmos, como sejam os erros de modelação, iniciais e
grosseiros; b) os erros associados à representação de entidades numéricas nas máquinas e às
operações que um computador pode realizar, nos quais se incluem os erros de arredondamento e de
truncatura.
3.3.1. Erros de modelação (ou de formulação)
Este tipo de erros está relacionado com uma certa tendência de alguns utilizadores não
completarem, com algum rigor, o modelo matemático. Nesta situação, deve-se ter consciência do
facto de que se está a trabalhar com um modelo mal construído e não adequado à realidade física.
Desta forma, nenhum método numérico poderá originar resultados precisos.
3.3.2. Erros iniciais (incertezas dos dados do modelo)
Na etapa da modelação matemática de um problema real, muitas vezes é necessário usar dados
obtidos por medidas experimentais. Nesta fase, tanto pode ocorrer uma modelação incorreta, em
que a expressão matemática não reflete adequadamente o fenómeno físico, como os dados terem
- 25 -
Análise e representação de erros
sido obtidos com pouca exatidão. Nestes casos, é necessária a realização de testes para verificar o
quanto os resultados são sensíveis às alterações dos dados fornecidos (análise de sensibilidade).
Grandes alterações nos resultados devido a pequenas variações nos dados são sintomas de um
mal condicionamento do modelo proposto, havendo então necessidade de uma nova modelação do
problema. Um problema matemático cuja solução obtida (resultados) é muito sensível a pequenas
variações nos dados e parâmetros do problema diz-me mal condicionado; diz-me bem condicionado
se pequenas variações nos dados e parâmetros induzem sempre pequenas variações na solução.
3.3.3. Erro grosseiro
A possibilidade de um computador cometer um erro é muito baixa; no entanto, podem ser
cometidos erros na elaboração do algoritmo, quer na sua implementação como na introdução dos
dados iniciais. Executar o programa com dados iniciais cujos resultados (solução) são conhecidos,
ajuda a detetar erros e a removê-los, mas demonstra, apenas, que o programa está correto para
aquele conjunto de dados; por isso, é que estes dados devem ser específicos. O ideal seria elaborar
uma prova de correção de programa, o que não é uma tarefa trivial.
3.3.4. Erro de arredondamento
Um qualquer número decimal, por exemplo 0.4 10 (base 10), não pode ser representado
exatamente num computador porque tem que ser convertido em binário (base 2) e armazenado
num número finito de bits. O erro causado por esta imperfeição na representação de um número é
denominado de erro de arredondamento. As causas e consequências deste tipo de erros serão
abordadas na próxima secção.
3.3.5. Erro de truncatura
O erro de truncatura é devido à aproximação de um problema por outro, como, por exemplo, a
substituição de um problema contínuo por um discreto. É sabido que, para avaliar uma função
matemática no computador, apenas podem ser requeridas as operações aritméticas e lógicas, por
serem as operações que ele é capaz de efetuar. Por exemplo, para avaliar f(x) = sen(x) esta tem
que ser aproximada por uma série, tal como
sen(x ) =
∞
2n+1
x
∑ (−1)n (2n+1)!
n=0
= x−
x3
x5
x7
+
−
+ ..., 0 ≤ x ≤ π
6
120 5040
4
À medida que n aumenta, mais o valor da série se aproxima do valor real. A tabela que se segue
mostra a diferença entre o valor obtida pela série de sen(x) e um valor mais exato, para n até 2, 3
e 4. Quando n aumenta, o erro de truncatura diminui, ficando claro que estes erros são devidos às
várias truncaturas da série (ver tabela que se segue).
- 26 -
Análise e representação de erros
2n+1
∞
x
∑ (−1)n (2n+1)!
− sen(x )
n=0
x
t=2
t=3
t=4
0
0
0
0
/16
2,4 x 10-6
2,2 x 10-9
1,2 x 10-12
/8
7,8 x 10-5
2,9 x 10-7
6,1 x 10-10
/6
3,3 x 10-4
2,1 x 10-6
8,1 x 10-9
/4
2,5 x 10-3
3,6 x 10-5
3,1 x 10-7
3.4. Valores aproximados e erros
Ao resolver um problema numérico no computador obtém-se, em geral, um valor aproximado da
solução exata do problema. Assim sendo, é importante poder avaliar-se a qualidade da
aproximação, isto é, estimar ou limitar a discrepância entre a solução aproximada calculada e a
solução exata. Esta qualidade pode ser medida através do cálculo dos erros absoluto e relativo.
3.4.1. Erro absoluto
Seja X o valor exato de um número e fl(X) o seu valor aproximado por uma representação de
ponto flutuante. O erro absoluto (EAX) é definido como o valor absoluto da diferença entre o valor
exato e o valor aproximado:
EAX = | X - fl(X) |.
Ou seja, conhecendo-se fl(X) e EAX, pode-se afirmar que
X = fl(X)  EAX.
Como para a maior parte dos problemas X é desconhecido, não é possível calcular o erro
absoluto, sendo apenas possível estimar-se o seu valor. Geralmente conhece-se a quantidade não
negativa dX, tal que
EAX = | X - fl(X) | ≤ dX ,
que se denomina por um limite superior do erro absoluto. Desta relação pode-se concluir que o
valor exato pertence ao intervalo
fl(X) - dX ≤ X ≤ fl(X) + dX .
Por exemplo, Arquimedes estimou o valor de  através da média do perímetro de polígonos que
estavam contidos numa circunferência de raio unitário e de polígonos que continham a
circunferência. Fazendo uso deste método, Arquimedes foi capaz de estimar
π min = 3.1409... = 3 +
1137
1335
< π < πmax = 3 +
= 3.1428...
8069
9347
- 27 -
Análise e representação de erros
Desta forma, Arquimedes obteve erros absolutos iguais a:
EA = 6.830 x 10-4 para min,
EA = 1.2339 x 10-4 para pmax e,
EAp = 2.7546 x 10-4 para a média entre pmin e pmax.
Portanto, Arquimedes poderia afirmar que
π =
1
1
πmin + πmax ±
π
− πmin = 3.14187 ± 0.00096.
2
2 max
(
)
(
)
3.4.2. Erro relativo
Seja X o valor exato de um número e fl(X) o seu valor aproximado. O erro relativo (ERX) pode
ser definido como o erro absoluto dividido por X:
ER X =
EA X
∣X ∣
=
∣
δX
X − fl( X)
≤
.
X
∣X ∣
∣
Como para a maior parte dos problemas X é desconhecido, é usual substituí-lo pelo valor
aproximado fl(X) no denominador da expressão para o erro relativo, como a seguinte:
ER X =
EA X
∣ fl( X) ∣
=
∣
∣
X − fl(X )
≤
fl(X)
δX
∣ fl( X) ∣
.
O erro relativo não tem dimensão e, em geral, só é conhecido o limite superior do seu valor, X, o
qual se define da seguinte forma:
ERX ≤ X .
A quantidade 100 ERX, expresso em percentagem, chama-se percentagem do erro.
Voltando ao exemplo anterior, os erros relativos das estimativas de Arquimedes foram:
ERp = 2.1741 x 10-4 para pmin,
ERp = 3.9262 × 10-4 para pmax e,
ERp = 8.7674 x 10-5 para a média.
Em geral, a melhor medida para se estimar a precisão de uma aproximação é o erro relativo,
pois este indica diretamente o número de dígitos significativos corretos na aproximação.
3.4.3. Fórmula fundamental dos erros
Considere-se um determinado problema de cálculo numérico, Y = f(X). Mesmo que seja possível
executar f de forma exata, qualquer perturbação no valor dos dados irá afetar o valor dos
resultados; são os erros de propagação: Y = f (X). Por outro lado, mesmo que os dados sejam
exatos, o método de cálculo pode ser aproximado; os resultados virão afetados de erros gerados:
Y = f (X). Na maior parte das vezes, ocorrem sucessivas combinações desses dois tipos de erros:
Y = f (X).
- 28 -
Análise e representação de erros
A fórmula fundamental do cálculo dos erros serve para indicar como se propagam os erros ao
longo do processo de cálculo numérico. Seja Y = f(X), onde f é uma função continuamente
diferenciável em R. Admita-se que Y = f (fl(X)), isto é, Y é obtido usando aritmética exata com
dados ligeiramente perturbados (fl(X)). Então, usando o Teorema do Valor Médio (T.V.M.), obtém-se
os seguintes resultados:
(a) EA Y = ∣Y −Y ∣, por definição de erro absoluto
= ∣f (X ) −f (fl( X)) ∣, por hipótese
= ∣f '()∣ ∣X −fl( X) ∣,   (X, fl(X)) (pelo T.V.M.)
= ∣f '()∣ EA X, por definição de erro absoluto
EA Y = ∣f ' ( )∣ EA X
(b) ER Y =
=
EA Y
∣Y ∣
, por definição de erro relativo
∣f ' ( )∣∣X −fl(X) ∣
∣Y ∣
=
, pela alínea anterior
∣X ∣ ∣f '()∣ ∣X −fl(X) ∣
∣Y ∣
∣X ∣
=
∣X ∣ ∣f '()∣
ER X, por definição de erro relativo
∣Y ∣

∣X ∣∣f ' (X)∣
ER X , porque X ≈ fl(X) e   (X, fl(X))
∣f (X ) ∣
ER Y 
∣X ∣ ∣f '(X )∣
ER X
∣f (X) ∣
Normalmente
∣X f ' (X)∣
é designado por número de condição de f em X e nota-se por cond
∣f (X) ∣
f(X). Este valor, cond f(x), é um indicador do efeito da propagação do erro relativo, no valor
da função f no ponto X, e permite avaliar em que condições a função é bem ou mal
condicionada.
Exemplos:
Analisar os efeitos da propagação de erros nas funções xn e nx com n  N.
(a) f(x) = xn, com n  N.
∣
∣x f ' (x )∣
x n x n−1 ∣
cond f (x) =
=
= n
∣f (x) ∣
∣xn ∣
Verifica-se que a propagação do erro relativo depende apenas de n e não de x.
- 29 -
Análise e representação de erros
(b) f(x) = nx, com n  N.
cond f (x) =
∣x nx ln x ∣ = ∣x ln x ∣
∣x f ' (x )∣
=
∣f (x) ∣
∣n x ∣
Neste caso, verifica-se que a propagação do erro relativo depende de x mais do que de n.
3.4.4. Número de dígitos significativos
Quando se contabiliza o número de dígitos de um valor numérico, não se deve incluir os zeros no
início do número, uma vez que estes zeros apenas ajudam a localizar a posição ideal do ponto
decimal. Caso se queira contar o número de decimais, então os zeros à direita do ponto decimal
devem ser incluídos. Por exemplo, o número 0.00147 é dado com três dígitos mas possui cinco
decimais. O número 12.34 é dado com quatro dígitos, mas possui apenas dois decimais.
Quando se trabalha com uma representação de um número obtida por meio de um processo de
arredondamento ou truncatura, uma maneira alternativa para se estimar a qualidade da
aproximação, ou seja, a exatidão do número, consiste em calcular o número de dígitos
significativos corretos da representação.
Se fl(X) é uma aproximação de X então diz-se que fl(X) aproxima X com k dígitos significativos se
EA X = ∣X − fl(X)∣ ≤
1 s+1−k
b
,
2
em que s é tal que bs  |X|  bs+1 .
O dígito significativo do valor aproximado que se encontra mais à esquerda é chamado de digito
mais significativo e o mais à direita digito menos significativo. O número de dígitos significativos de
um valor aproximado dá boa informação sobre a qualidade dessa aproximação. Existe uma relação
entre o número de dígitos significativos de um valor aproximado de um número e o erro relativo
desse valor. Com efeito, se fl(X) é uma aproximação para X com k dígitos significativos corretos
numa representação de base b, então
ER X =
∣
∣
X − fl(X )
1 −k+1
≤
b
X
2
onde k é o maior número inteiro positivo para o qual a desigualdade acima é verificada.
Exemplo: sejam b = 10, X = 1/6 e fl(X) = 0.16667; então
ER X =
∣
∣
1/ 6 − 0.16667
1
= 2 × 10−5 ≤ × 10−5+1 .
1/6
2
Ou seja, o número de dígitos significativos em fl(X) é k = 5.
- 30 -
Análise e representação de erros
3.5. Erros de arredondamento
O tamanho finito da palavra utilizada num computador digital para a representação de números
de ponto flutuante provoca o aparecimento de diversos tipos de erros. Uma estratégia para reduzir
estes erros, usada na maioria dos computadores, consiste em utilizar números de ponto flutuante
normalizados, isto é, números cuja mantissa M está sempre dentro do intervalo
b−1 =
1
≤ M < 1 = b 0,
b
ou seja, 0.5  M  1 para computadores de base b = 2.
Esta estratégia diminui o número de zeros à direita do ponto e maximiza o número de dígitos não
nulos utilizados para representar um dado número.
No entanto, mesmo num sistema com representação normalizada, nem todos os números reais
podem ser representados. Utilizando o exemplo do sistema F(2, 4, -5, 6), o número racional
y = 0.12345999...
não pode ser exatamente representado. A forma de y na base 2 é:
y = 0.12345999... = (0.000111111001101...) 2.
Para escrever y de acordo com o sistema F(2, 4, -5, 6), deve-se primeiro normalizar de acordo com
as operações:
y = 2−4 + 2−5 + 2−6 + 2−7 + 2−8 + 2−9 + 2−12 + 2−13 + 2−15 + ...
= 2−3 × ( 2−1 + 2−2 + 2−3 + 2−4 + 2−5 + 2−6 + 2−9 + 2−10 + 2−12 + ... )
= ( 0.111111001101... ) × 2−3,
o qual está agora na forma normalizada. De acordo com a expressão apresentada na secção 2.2
(pág. 20), então podemos identificar
M = 0.111111001101... ; e = -3.
Contudo, para o sistema F(2, 4, -5, 6), pode-se usar apenas 4 dígitos na mantissa. Desta forma, uma
possível aproximação para y é:
fl(y) = (0.1111) x 2-3,
o qual corresponde ao seguinte número na base 10:
fl(y) = 0.1171875… ,
resultando nos seguintes erros absoluto e relativo:
EAy = 6.272 x 10-3
ERy = 5.3525 x 10-2 = 5.35%.
Este procedimento de aproximação é denominado de arredondamento por defeito ou corte do
número.
- 31 -
Análise e representação de erros
Considere-se um número X na forma normalizada que não possua representação exata no sistema
F(b, n, emin, emax). Sejam X o menor número representável no sistema menor que X e X o maior
número representável no sistema maior que X. Então,
X  X  X
Pode-se escrever X como
X = 0.d 1 d 2 ... dn dn+1 ... be = 0.d1 d2 ...d n b e + 0.0 ... 0dn+1 ... be =
(
)
(
)
= 0.d1 d2 ... dn b e + 0. dn+1 ... b e−n.
(
)
(
)
Ou seja,
X = 0. d1 d2 ... dn b e + g X b e−n
(
)
com
(
g X = 0.dn+1 ...
)
∣g X∣ < 1
e
em que gX be-n é a parcela de X que não é incluída na sua representação. Existem duas formas de se
realizar a aproximação: arredondamento por defeito (ou corte do número) e simétrico.
3.5.1. Arredondamento por defeito (ou corte do número)
O arredondamento por defeito consiste simplesmente em ignorar gX. Assim,
fl(X ) = 0. d1 d2 ... dn b e
(
)
o qual é representável no sistema. Neste caso, o erro absoluto cometido por corte é
EA X = ∣X − fl(X) ∣ = g X b e−n < be−n
∣ ∣
pois |gX| < 1, obtendo-se, desta forma, um limite superior para o erro absoluto.
O erro relativo cometido por corte é
ER X =
EA X
∣fl(X) ∣
=
g X be−n
(
b−n
=
<
= b1−n
e
−1
0. d1 d2 ...d n
0. d1 d2 ...d n b
b
pois 0.d 1 d 2 ... dn ≥ b−1 e
(
g X b e−n b−e
)
)
(
)
∣ gX ∣ < 1, obtendo-se, desta forma, um limite superior para o erro
relativo, ao qual também se dá o nome de unidade de erro de corte.
Desta forma, podem ser enunciados os resultados que se seguem, relacionando o número de
dígitos significativos de um valor aproximado de um número com o seu erro relativo.
Teorema:
Se o dígito mais significativo do valor aproximado de um número é d 1 ≠ 0 e se esse valor tem k
dígitos significativos, então o seu erro relativo não excede b1-k.
Corolário:
Se o erro relativo do valor aproximado de um número não excede (1/2) b-k, então esse valor tem
k dígitos significativos.
- 32 -
Análise e representação de erros
Para o exemplo anterior, no sistema de representação F(2, 4, -5, 6), pode-se escrever:
y = ( 0.1111) 2−3 + g y 2−3−4 , sendo gy = (0.11001101...)
Então, efetuando o arredondamento por defeito obtém-se fl(y2).
3.5.2. Arredondamento simétrico
No arredondamento simétrico, executa-se a seguinte operação:
fl(X ) =
{
{
1
se g X <
2
1
0. d1 d2 ...(dn+1) b e , se g X ≥
2
( 0. d1 d2 ... dn) b
(
e
∣ ∣
,
∣ ∣
)
Neste caso, o erro absoluto cometido por arredondamento simétrico é
EA X =
1
se g X <
2
1
e−n
gX − 1 b
, se g X ≥
2
∣gX ∣ be−n ,
∣ ∣
∣
∣ ∣
∣
(
<
)
1 e−n
b
,
2
de onde se obtém uma estimativa superior para o erro absoluto.
O erro relativo cometido por arredondamento simétrico é
ER X =
{
(
(
1 e−n
b
2
)
0.d 1 d 2 ... dn b
e
,
1 e−n
b
2
1
se g X <
2
∣ ∣
1
, se g X ≥
e
2
0.d 1 d 2 ...(dn +1) b
)
∣ ∣
(
<
1 e−n
b
2
e
( 0.1)b b
=
)
1 1−n
b
2
o qual fornece uma estimativa superior para o erro relativo, ao qual também se dá o nome de
unidade de erro de arredondamento.
No exemplo acima, como gy > 1⁄2, deve-se somar 1 ao dígito d 4 resultando, com o auxílio da
tabela de adição de binários,
fl(y ) = (0.1111) 2−3 + (0.0001) 2−3 = (1.0000) 2−3 = (0.1000) 2−2,
Neste caso, obtém-se
fl(y) = 0.125,
o qual possui um erro relativo de 1,2% de y, bem menor que o erro obtido com o arredondamento
por defeito, que foi de 5,35%.
Os computadores mais recentes modificam ligeiramente o arredondamento em relação à fórmula
apresentada antes. Nesta, o último dígito significativo (d n) não será alterado se |gX| < 1⁄2 e será
alterado se |gX| ≥ 1⁄2. Há, portanto, uma ligeira preferência para a alteração de d n no processo de
- 33 -
Análise e representação de erros
arredondamento, o que insere um erro sistemático no processo. Atualmente, se |g X| = 1⁄2, o valor
de dn será alterado somente em metade das situações, segundo algum critério. Este critério pode
ser, por exemplo, a paridade de d n. Assim, para b = 10, o número 12.5 seria arredondado para 12,
enquanto que 13.5 seria arredondado para 14 (critério denominado por arredondamento par).
3.5.3. Erros de arredondamento na álgebra de ponto flutuante
A fórmula fundamental do cálculo dos erros pode ser usado para calcular limites superiores dos
erros absoluto e relativo das operações fundamentais.
Para além dos erros resultantes da representação de números de ponto flutuante por
computadores, também as operações algébricas, que necessariamente são realizadas pelo
computador, introduzem erros no resultado destas operações, e que tendem a acumular-se à
medida que o número de operações de ponto flutuante são realizadas pelo computador.
O exemplo seguinte ilustra o aparecimento deste tipo de erros. Suponha-se que se está a usar
um sistema numérico de base 10 com 5 dígitos na mantissa. Pretende-se calcular o valor da função
f ( x) =
1 − cos(x )
sen(x )
=
sen(x )
1 + cos(x )
para x = 0.007.
Existem funções intrínsecas do compilador que calculam o valor das funções trigonométricas
dentro da precisão disponível, através de um processo de arredondamento. Assim,
sen(0.007) = 0.69999 × 10−2
cos (0.007) = 0.99998
A primeira expressão para f(x) fornece:
f ( x) =
1 − cos(x )
1−0.99998
0.2 × 10−4
=
=
= 0.28572 × 10−2
−2
−2
sen(x )
0.69999 × 10
0.69999 × 10
enquanto que a segunda expressão fornece
f ( x) =
sen(x )
0.69999 × 10−2
=
= 0.35000 × 10−2
1 + cos(x )
1 + 0.99998
sendo que este último resultado é o correto, dentro da precisão de 5 dígitos disponível. O erro
relativo entre o primeiro valor (errado) e o segundo (correto) é de 22.5%. Na primeira expressão,
devido à escolha feita na precisão, restou somente um dígito relevante no numerador após a
subtração. Isto levou a uma perda de precisão e a um resultado erróneo devido ao cancelamento de
dois números muito próximos entre si. Este problema seria evitado caso o sistema de representação
dispusesse de, pelo menos, mais um dígito significativo na mantissa; porém, o que importa frisar
aqui é que muito facilmente este tipo de erro de arredondamento ocorre, devido ao tamanho finito
da palavra no computador. Por outro lado, caso fosse solicitado o valor de f(x) para x ≈ , seria a
segunda expressão que forneceria um valor incorreto e a primeira a fornecer um valor incorreto.
- 34 -
Análise e representação de erros
Este exemplo demonstra a perda de precisão numérica devida a erros de arredondamento, onde
o número de dígitos significativos é reduzido na subtração de dois números próximos entre si (este
efeito designa-se por cancelamento subtrativo). Isto mostra que não é possível confiar cegamente
no cálculo realizado; deve-se sempre analisar cuidadosamente o algoritmo usado na procura de
possíveis fontes de erros.
Desta forma, é importante conhecer-se como se propagam os erros nas operações aritméticas:
adição, subtração, multiplicação e divisão.
3.5.3.1. Adição
a) Erro absoluto:
EA X+Y = ∣(X + Y) −(fl(X ) + fl(Y )) ∣ = ∣( X −fl(X)) + ( Y −fl(Y )) ∣
≤ ∣X −fl(X) ∣ + ∣Y −fl( Y) ∣ = EA X + EA Y
O erro absoluto da soma de dois números é limitada pela soma dos erros absolutos individuais.
b) Erro relativo:
ER X+Y =
EA X+Y
∣X + Y ∣
≤
EA X + EA Y
∣X + Y ∣
EA X
=
∣X ∣
∣X ∣ ∣X + Y ∣
+
EA Y
∣Y ∣
∣Y ∣ ∣X + Y ∣
∣X ∣
∣Y ∣
= ER X
+ ER Y
∣X + Y ∣
∣X + Y ∣
{
}
Considerando ER = max ER X , ER Y conclui-se que ER X+Y ≤ ER .
O erro relativo da soma de dois números é limitada pelo maior dos erros relativos individuais.
3.5.3.2. Subtração
a) Erro absoluto:
EA X−Y = ∣( X −Y ) −(fl(X) −fl(Y )) ∣ = ∣(X −fl(X )) −(Y −fl( Y)) ∣
≤ ∣X −fl(X) ∣ + ∣Y −fl( Y) ∣ = EA X + EAY
O erro absoluto da subtração de dois números é limitada pela soma dos erros absolutos
individuais.
b) Erro relativo:
ER X−Y =
EA X−Y
∣X −Y ∣
≤
EA X + EA Y
∣X −Y ∣
=
EA X
∣X ∣
∣X ∣ ∣X −Y ∣
+
EA Y
∣Y ∣
∣Y ∣ ∣X −Y ∣
∣X ∣
∣Y ∣
= ER X
+ ER Y
∣X −Y ∣
∣X −Y ∣
Fenómeno de cancelamento subtrativo:
Quando se subtraem quantidades muito próximas (diferença X – Y pequena) o erro relativo
pode ser muito elevado.
- 35 -
Análise e representação de erros
3.5.3.3. Multiplicação
a) Erro absoluto:
ER XY  EA X ∣fl(Y) ∣ + EAY ∣fl(X ) ∣
b) Erro relativo:
ER XY  ER X + ER Y
Uma estimativa para o erro relativo na multiplicação é dada pela soma dos erros relativos dos
operandos (desde que estes venham afetados por um erro relativo pequeno).
3.5.3.4. Divisão
a) Erro absoluto:
ER X /Y 
EA X ∣fl(Y ) ∣ + EA Y ∣fl(X) ∣
fl(y )2
b) Erro relativo:
ER X /Y  ER X + ER Y
Uma estimativa para o erro relativo na divisão é dada pela soma dos erros relativos dos
operandos (desde que estes venham afetados por um erro relativo pequeno).
3.6. Erros de truncatura
Além dos erros de arredondamento que se cometem durante os cálculos, outros erros, os
chamados erros de truncatura, surgem com a utilização de certos métodos numéricos para a
resolução do problema matemático. Assim, a substituição de um problema contínuo por um
problema discreto ou de um processo de cálculo infinito por um finito, de modo que o método de
resolução envolva apenas uma sequência finita de operações aritméticas, originam estes erros.
O erro de truncatura é a diferença entre o resultado exato (obtido com os dados disponíveis
usando um método analítico/exato) e o resultado aproximado (obtido com um método numérico
que calcula uma solução aproximada a partir dos mesmos dados). São exemplos deste tipo de
processos de cálculo aproximados a truncatura de séries infinitas, a substituição de derivadas por
diferenças finitas ou o terminar de uma sequência iterativa antes da convergência.
Muitos métodos numéricos baseiam-se em processos de cálculo envolvendo séries infinitas; mas
apenas é possível considerar um número finito de parcelas, isto é, o processo de cálculo é truncado
(cortado) num certo ponto do seu desenvolvimento.
3.6.1. Cálculo de valores de funções transcendentes
As funções racionais são as únicas cujos valores podem ser calculados usando apenas uma
sequência finita das quatro operações aritméticas básicas. As funções transcendentes devem ser
- 36 -
Análise e representação de erros
aproximadas por funções racionais para que aproximações para os seus valores possam ser
calculados no computador.
Por exemplo, da fórmula de Taylor com resto para sen(x) tem-se:
sen(x ) = x −
x3 x5 x 7
x 2n−1
+
− + ... + (−1)n−1
+ R 2n (x),
3 ! 5! 7 !
(2n−1)!
onde
R2n (x ) = (−1)n
x 2n
sen(),
(2n)!
 ∈ [0, x ].
Definindo
p7 (x ) = x −
x3 x5 x7
+
−
3! 5! 7!
quando se usa p7(p/4) para aproximar sen(p/4) o erro de truncatura é dado por R 8(p/4). Note-se
que |R8(p/4)| < 0.3E-5. E p7(p/4) ≈ 0.70711 é uma aproximação para sen(p/4) com cinco algarismos
significativos.
3.6.2. Discretização
Ao usar-se o teorema do valor médio para aproximar o integral de f(x) tem-se
b
n−1
∫ f ( x) dx = h ∑
i=0
a
f ( xi) + R ,
com x 0 , x 1 , ..., x n ∈ [ a, b] , x 0 = a , x i = a + i h (i=1,2, ... ,n) e h=(b−a)/n,
onde, pelos teoremas do valor médio para integrais e do valor médio para a soma se tem
R = (h/2) (b – a) f'(),   [a, b].
Se R for suficientemente pequeno, então
b
n−1
∫ f ( x) dx  h
a
∑
i=0
f (x i ).
Ao usar-se a expressão da direita para calcular um valor aproximado para a expressão da
esquerda está-se a substituir o problema contínuo do cálculo do integral pelo problema discreto do
cálculo da soma. O erro que se originou, R, é o erro de truncatura.
Por exemplo, para o integral
0.1
∫ e−x
2
dx
0
ter-se-à
0.1
∫ e−x
2
2
2
2
dx  0.01 [e−0 + e−0.01 + ... + e−0.09 ]  0.0997.
0
Neste caso,
- 37 -
Análise e representação de erros
2
R = (0.01/ 2) (0.1 −0.0) (−2 e− ),
 ∈ [ 0,0.1] ou |R| < 10-4.
3.6.3. Métodos iterativos
Seja { xk }
k = 0,1,...,
uma sequência de elementos de Rn. Esta sequência diz-se definida
recursivamente se
xk = f(k, xk-1, …), (k = 1, 2, …),
com x0 definido explicitamente.
A sequência diz-se definida por iterações se f não depende de k. Aos valores x 0, x1, x2, …,
chamam-se iterações.
Para um grande número de problemas a sua solução pode colocar-se em termos do limite duma
sequência definida por iterações.
Considere-se a equação
x = f(x),
sendo f : D  Rn  Rn. Seja V  D fechado e  uma constante, chamada constante de Lipschitz de f,
satisfazendo 0   < 1 tal que
∥ f (x ) −f (y) ∥≤ λ ∥ x −y ∥, ∀ x , y ∈ V .
Se para x0  V a sequência definida pela iteração
xk = f(xk-1), (k = 1, 2, ...),
pode ser calculada tendo-se xk  V, então existe um único elemento x*  V tal que x* = f(x*), que se
chama ponto fixo de f. A sequência { xk } k = 0,1,..., converge e limk xk = x*.
Além disso,
∥ x * −xk ∥≤ λ ∥ x * −x k−1 ∥ (velocidade de convergência)
e
k
λ
λ
∥x *−xk ∥ ≤ 1−λ
∥xk−x k−1 ∥ ≤ 1−λ
∥x1−x0 ∥ (limite para o erro em xk como aproximação a x*)
Um processo de cálculo não pode decorrer indefinidamente e apenas um número finito de
iterações podem ser calculadas. Assim, têm de ser definidos critérios de paragem para os processos
iterativos. Uma decisão deverá ser tomada sobre que iteração será usada como a aproximação
pretendida.
Sendo x0, x1, x2, …, xk, …, uma sequência gerada por x k = f(xk-1), (k = 1, 2, …), x 0 especificado
explicitamente, convergindo para x* ponto fixo de f. Sendo limk xk = x* então, dado  > 0
∃k 0 ∈N : ∀ k > k 0,
∥ x * −xk ∥ < .
Desta expressão pode ser “deduzido” um critério de paragem: o cálculo das iterações pára com o
cálculo de xk+1 se, dado  > 0,
- 38 -
Análise e representação de erros
∥ x k+1 −xk ∥ < 
(1)
ou, se xk+1 ≠ 0
∥ x k+1 −xk ∥ <  ∥ xk+1 ∥.
(2)
Sendo discreto o sistema de numeração de um computador, o valor a especificar para e em (1)
depende de xk, que à priori é desconhecido. Em (2) o valor dado para e depende da unidade de erro
de arredondamento do sistema de ponto flutuante do computador e do número de algarismos
significativos com que se pretende a solução.
Uma estimativa para o número de iterações necessárias para que (1) possa ser satisfeita
(ignorando erros de arredondamento), é obtida usando
∥ x k+1 −xk ∥ ≤
λ k x 1 −x 0
∥
∥≤
.
Donde resulta
ln
k ≥
(∥

x 1 −x 0
ln 
)
∥
.
Para evitar desperdício de tempo de cálculo no computador decorrendo de convergência lenta
ou divergência, ou da escolha incorreta de um valor para e em (1) ou (2), um outro critério de
paragem deve ser usado adicionalmente. Especificando um número máximo de iterações, kmax, o
processo iterativo pára no cálculo de xk se k = kmax.
O esquema gral do método iterativo é o seguinte:
Algoritmo MetodoIterativo
{ Objetivos: esquema geral do método iterativo }
parâmetros de entrada: x0, e, kmax { aproximação inicial, erro, nº máximo de iterações }
parâmetros de saída: x1 { solução aproximada }
x1  x0
k0
repita
x0  x1
x1  f(x0)
kk+1
se
(∥ x1 −x 0 ∥ <  ∥ x1 ∥)
ou (k = kmax) então
interrompa
fim_se
fim_repita
- 39 -
Análise e representação de erros
3.7. Condicionamento e estabilidade
Devido à existência dos chamados erros iniciais, os dados e parâmetros do problema matemático
que se resolve (modelo matemático) não coincidem, em geral, com os dados e parâmetros do
problema real. Assim, se a solução exata do problema real for muito diferente da solução exata do
problema matemático, seja qual for o método usado para o resolver, os resultados obtidos não
terão interesse.
Um problema matemático cuja solução é muito sensível a variações nos seus dados e parâmetros
diz-se mal condicionado (ou matematicamente instável). Um problema diz-se bem condicionado
(ou matematicamente estável) se pequenas variações nos dados e parâmetros induzem sempre
pequenas variações na solução.
Por exemplo, considere-se a equação
1
1
x2 − x +
= 0,
3
36
cujas raízes são x1 = x2 = 1/6. A equação seguinte não tem raízes reais:
x2 – 0.333333 x + 0.027778 = 0,
Os coeficientes da segunda equação são aproximações dos correspondes da primeira, com erros
absolutos inferiores a 0.5E-6. Aqui, uma pequena variação nos coeficientes da equação origina uma
grande variação na solução. Notar que a “diferença” entre os dois problemas é induzida pela
representação da primeira equação num sistema de ponto flutuante de um computador.
A resolução de um problema numérico requer, em geral, a execução de um grande número de
operações aritméticas e, originando cada uma delas um erro de arredondamento, a acumulação
destes erros pode afetar significativamente o resultado obtido.
Um método numérico diz-se instável, ou que apresenta instabilidade induzida, se a
acumulação dos erros durante o cálculo pode ter grande influência no resultado final. Um método
estável produz sempre bons resultados (com problemas bem condicionados).
3.8. Análise de erros
No decurso da resolução numérica de um problema matemático num computador ocorrem erros.
Para estimar ou limitar o efeito da acumulação desses erros nos resultados obtidos deve ser feito a
análise de erros. Existem algumas técnicas de análise de erros, tais como a direta e a inversa.
Um algoritmo numérico define uma sequência finita de operações aritméticas. É assim possível,
teoricamente, usando limites para os erros, limitar ou estimar a cada passo o erro do resultado
intermédio e consequentemente o erro do resultado final. A esta forma de analisar os erros, dá-se o
nome de análise de erros direta.
- 40 -
Análise e representação de erros
Na análise de erros inversa o resultado calculado de um problema numérico é interpretado
como o resultado exato do problema que resulta de uma alteração nos dados e parâmetros do
problema real.
3.9. Conclusão
A figura seguinte ilustra a ocorrência de erros no processo de resolução de um problema
matemático no computador.
Os erros de modelação (iniciais) são inerentes ao problema, os erros de truncatura ao método e
os erros de arredondamento ocorrem no processo de cálculo de uma solução numérica no
computador.
Em geral, a magnitude destes erros quando se originam é pequena. No entanto, a maneira como
se acumulam e se propagam pode, por vezes, afetar significativamente o resultado final. Assim, a
formulação matemática do problema e a escolha do método numérico são aspetos muito
importantes a considerar. O primeiro porque se um problema é mal condicionado é muito sensível a
variações nos seus dados e parâmetros. Neste caso, os erros de modelação (iniciais) propagar-se-ão,
a solução do problema matemático pode ser diferente da solução do problema real. A escolha de
um método estável é fundamental para que se possa garantir a precisão dos resultados calculados.
- 41 -
Download

Capítulo 2. Representação de Números e Erros