Você está na página 1de 56

ndice de contedos

ndice de contedos

Captulo 1. Implementao de Algoritmos.................................................1


1.Computao Numrica............................................................................1
2.Etapas na resoluo de um problema..........................................................2
2.1.Definio do problema..................................................................................2
2.2.Modelao matemtica..................................................................................2
2.3.Clculo da soluo numrica...........................................................................2
2.3.1.Elaborao do algoritmo..........................................................................2
2.3.2.Codificao do programa (implementao do algoritmo)...................................3
2.3.3.Processamento (execuo) do programa.......................................................3
2.3.4.Exemplo..............................................................................................3
2.4.Anlise dos resultados...................................................................................4

3.Notao algortmica...............................................................................4
3.1.Estrutura do algoritmo..................................................................................4
3.2.Variveis e comentrios.................................................................................5
3.3.Expresses e comando de atribuio.................................................................5
3.3.1.Expresses aritmticas............................................................................5
3.3.2.Expresses lgicas..................................................................................6
3.3.3.Expresses literais.................................................................................7
3.4.Comandos de entrada e sada..........................................................................7
3.5.Estruturas condicionais..................................................................................7
3.5.1.Estrutura condicional simples....................................................................7
3.5.2.Estrutura condicional composta.................................................................7
3.5.3.Estruturas de repetio...........................................................................8

-i-

ndice de contedos

3.6.Falha no algoritmo.......................................................................................9
3.7.Exemplo de algoritmo...................................................................................9

4.Notao matemtica.............................................................................10
5.Complexidade computacional..................................................................11
6.Representao de nmeros.....................................................................13
6.1.Representao de nmeros em diferentes bases..................................................13
6.1.1.Representao de nmeros inteiros e converses de base................................13
6.1.1.1.Representao de nmeros inteiros.....................................................14
6.1.1.2.Converso pelo mtodo das divises sucessivas.......................................14
6.1.2.Representao de nmeros reais e converses de base....................................15
6.1.2.1.Representao em formato de ponto fixo..............................................15
6.1.2.2.Representao no formato de ponto flutuante........................................16
6.1.2.3.Aritmtica de ponto flutuante............................................................17
6.1.3.Converso de nmeros inteiros da base b para a base decimal...........................19
6.1.3.1.Algoritmo de Horner........................................................................20
6.1.3.2.Diviso de Ruffini...........................................................................21
6.1.4.Converso de nmeros fracionrios da base b para a base decimal.....................21
6.1.4.1.Algoritmo de Horner........................................................................22
6.1.4.2.Diviso de Ruffini...........................................................................22
6.1.5.Nmero binrio infinito..........................................................................23
6.2.Operaes com nmeros binrios....................................................................24
6.2.1.Adio binria.....................................................................................24
6.2.2.Subtrao binria.................................................................................25
6.2.3.Multiplicao binria.............................................................................26
6.2.4.Diviso binria.....................................................................................27
6.3.Representao de nmeros em computadores digitais...........................................27
6.3.1.Representao de nmeros inteiros...........................................................27
6.3.2.Representao de nmeros reais...............................................................31

- ii -

ndice de contedos

7.Erros.................................................................................................35
7.1.Fontes de erros e incertezas..........................................................................35
7.2.Preciso e exatido.....................................................................................36
7.3.Tipos de erros...........................................................................................37
7.3.1.Erro de formulao ou de modelao.........................................................37
7.3.2.Erros iniciais (incertezas dos dados do modelo).............................................37
7.3.3.Erro grosseiro......................................................................................37
7.3.4.Erro de arredondamento........................................................................37
7.3.5.Erro de truncatura................................................................................38
7.4.Valores aproximados e erros..........................................................................38
7.4.1.Erro absoluto......................................................................................38
7.4.2.Erro relativo.......................................................................................39
7.4.3.Frmula fundamental dos erros................................................................40
7.4.4.Nmero de dgitos significativos...............................................................41
7.5.Erros de arredondamento.............................................................................42
7.5.1.Arredondamento por defeito (ou corte do nmero)........................................43
7.5.2.Arredondamento simtrico......................................................................44
7.5.3.Erros de arredondamento na lgebra de ponto flutuante..................................45
7.5.3.1.Adio........................................................................................46
7.5.3.2.Subtrao....................................................................................46
7.5.3.3.Multiplicao................................................................................47
7.5.3.4.Diviso........................................................................................47
7.6.Erros de truncatura.....................................................................................47
7.6.1.Clculo de valores de funes transcendentes..............................................47
7.6.2.Discretizao......................................................................................48
7.6.3.Mtodos iterativos................................................................................48
7.7.Condicionamento e estabilidade.....................................................................51
7.8.Anlise de erros.........................................................................................51
7.9.Concluso................................................................................................52

- iii -

ndice de contedos

- iv -

Captulo 1. Implementao de Algoritmos

Captulo 1. Implementao de Algoritmos

1. Computao Numrica
Uma etapa intermdia importante durante a resoluo de um problema envolve a elaborao de
um algoritmo, o qual dever ser posteriormente implementado numa linguagem de programao
para se obter os resultados numricos (soluo do problema) num computador.
O Clculo Numrico uma metodologia para resolver problemas matemticos por intermdio de
um computador, sendo amplamente utilizado por engenheiros e cientistas. Uma soluo via Clculo
Numrico sempre numrico, enquanto que os mtodos analticos fornecem usualmente um
resultado em termos de funes matemticas. Muito embora uma soluo numrica seja uma
aproximao do resultado exato, ela pode ser obtida com um grau elevado de exatido. Uma
soluo numrica calculada mesmo quando o problema no tem soluo analtica, facto comum
nas equaes diferenciais. O integral indefinido

ex

dx

de grande utilidade na Estatstica, uma primitiva que no pode ser representada, explicitamente,
2

x
por funes elementares. A rea sob a curva descrita por e
de a at b pode ser determinada por

meio de algoritmos numricos que so aplicveis a qualquer outro integrando, no sendo, portanto,
necessrio fazer substituies especiais ou mesmo a integrao por partes para se obter o
resultado.
Para computar (calcular por meio de um computador) um resultado numrico, so necessrias
operaes aritmticas (adio, subtrao, multiplicao e diviso) e lgicas (comparao,
conjuno, disjuno e negao). Considerando que estas so as nicas operaes matemticas que
os computadores so capazes de realizar, ento os computadores e o Clculo Numrico formam uma
combinao perfeita. Relembre-se que o primeiro computador de grande porte totalmente
eletrnico, o ENIAC (Electronic Numerical Integrator And Calculator), projetado para realizar
clculos balsticos, e os atuais maiores supercomputadores no mundo inteiro esto dedicados a
realizar clculos numricos.
-1-

Captulo 1. Implementao de Algoritmos

2. Etapas na resoluo de um problema


Dado um problema1 qualquer, como resolv-lo no computador utilizando as tcnicas de Clculo
Numrico? Ser mostrado, a partir de um exemplo simples, que a soluo de um problema pode ser
obtida em quatro etapas:
1. definio do problema,
2. modelao matemtica,
3. clculo da soluo numrica e,
4. anlise dos resultados.

2.1. Definio do problema


Nesta etapa, define-se qual o problema real a ser resolvido. Seja, por exemplo, calcular

a ,

a > 0, usando apenas as 4 operaes aritmticas.

2.2. Modelao matemtica


O problema real transformado no problema original por meio de uma formulao matemtica
(denominado modelo matemtico). No exemplo,
x= a x 2 = a f ( x) = x 2 a = 0,
o problema real, calcular

a ,

a > 0 , foi transformado no problema original (modelo matemtico)

que determinar a raiz de uma equao algbrica de grau 2.


Geralmente, o problema original possui mais solues que o problema real. Para este exemplo,
+ a e a so as duas razes (solues) da equao algbrica.

2.3. Clculo da soluo numrica


Nesta etapa feito a escolha do mtodo numrico mais apropriado para resolver o problema
original, obtido na modelao matemtica. Depois de feita a escolha do mtodo adequado, este
descrito atravs de um algoritmo, o qual posteriormente implementado num computador com
vista obteno dos resultados numricos (solues). Desta forma, esta etapa pode ser subdividida
nas trs fases seguintes (depois de efetuada a escolha do mtodo):
a) elaborao do algoritmo,
b) codificao do programa e,
c) processamento (execuo) do programa.
2.3.1. Elaborao do algoritmo
Um algoritmo a descrio de um conjunto de comandos que, quanto ativados (executados),
resultam numa sucesso finita de acontecimentos. Em vez de se implementar um mtodo
diretamente numa linguagem de programao, prefervel descrev-lo atravs de uma notao
1 Esta palavra deriva do nome do matemtico rabe Mohammed ibu-Musa al-Khowarizmi ( 800 d.C.)
-2-

Captulo 1. Implementao de Algoritmos


algortmica. Desta forma, possvel abstrair-se dos detalhes da linguagem de programao do
computador e concentrar-se apenas nos aspetos matemticos do mtodo.
Alm do mais, a descrio do mtodo numa notao algortmica facilita a sua implementao em
qualquer linguagem de programao. Na seco 3 apresentada a notao algortmica adotada
para descrever os mtodos numricos includos neste documento.
2.3.2. Codificao do programa (implementao do algoritmo)
Nesta fase, o algoritmo implementado na linguagem de programao escolhida. Como os
aspetos matemticos do mtodo j foram pensados na fase de elaborao do algoritmo, agora
apenas necessrio preocupar-se com os detalhes de implementao na linguagem adotada.
2.3.3. Processamento (execuo) do programa
Finalmente, o cdigo do programa obtido da implementao do algoritmo numa linguagem de
programao deve ser executado pelo computador. Se for detetado algum erro lgico na fase de
processamento, isto , se a execuo do programa produzir resultados inesperados, ento deve-se
retornar fase de elaborao do algoritmo para o corrigir.
2.3.4. Exemplo
Para exemplificar a etapa de determinar a soluo numrico do problema do clculo de

a, ser

utilizado o mtodo de Newton (descrito mais adiante) para calcular uma raiz de f ( x) = x 2 a = 0:
f (x k )
x k+1 = x k
.
f ' (x )
k

Substituindo f(x) e f'(x) na expresso acima, tem-se que


x 2k a

x k+1 = x k
2 xk

xk
a
= xk
+
2
2x k

ou seja,

a
1
x k+1 = x k +
.
xk
2
Este um processo iterativo para calcular

a partir de um valor inicial x 0, usando apenas as

operaes aritmticas. Para calcular 9, usando x0 = 1, o processo produz os seguintes resultados:


k

xk

1.0000

1
2
3
4
5

5.0000
3.4000
3.0235
3.0001
3.0000

xk - 3
2.0000
0.4000
0.0235
0.0001
0.0000
-3-

Captulo 1. Implementao de Algoritmos


A coluna xk mostra as sucessivas aproximaes de 9 a cada iterao k e a coluna x k-3 apresenta a
diferena entre o valor aproximado xk e o valor exato 3.

2.4. Anlise dos resultados


A adequao da soluo numrica ao problema real verificada nesta ltima etapa. Se a soluo
no se mostrar satisfatria, deve-se construir um novo problema original (modelo matemtico)
atravs de uma nova formulao matemtica e determinar uma nova soluo numrica.
Exemplo: Para o caso anterior ( a), se for atribudo o valor inicial x 0 = -1 (ou qualquer x0 < 0),
ento o processo convergir para -3, que, embora seja uma raiz de f ( x) = x 2 9 = 0, no 9.
i

xi

-1.0000

1
2
3
4
5

-5.0000
-3.4000
-3.0235
-3.0001
-3.0000

xi - 3
-8.0000
-6.4000
-6.0235
-6.0001
-6.0000

Alguns modelos matemticos podem produzir solues que no tm sentido fsico ou qumico,
como, por exemplo, tempo negativo, concentrao complexa, etc. O objetivo da anlise dos
resultados justamente discernir qual a soluo vlida para o problema real dentre as vrias
fornecidas pelo modelo matemtico (se existirem algumas).

3. Notao algortmica
A descrio de um algoritmo, atravs duma notao algortmica, melhora o seu entendimento,
pois apenas os aspetos do raciocnio matemtico so realados, sem ser necessrio levar em
considerao os detalhes de implementao de uma linguagem de programao.

3.1. Estrutura do algoritmo


Um algoritmo deve iniciar-se com
Algoritmo <nome-do-algoritmo>
e terminar com
fimalgoritmo
Tambm
{ Objetivo: <objetivo-do-algoritmo> }
deve ser utilizado para descrever a finalidade do algoritmo. Os dados necessrios para a execuo
de um algoritmo so requisitados por meio do comando
parmetros de entrada <lista-de-variveis>

-4-

Captulo 1. Implementao de Algoritmos


onde <lista-de-variveis> so os nomes das variveis, separadas por vrgulas, contendo os valores
fornecidos. No necessrio descrever exatamente como os valores dessas variveis sero
fornecidas ao algoritmo. Compete ao programador decidir durante a codificao do programa se os
dados sero fornecidos interativamente pelo teclado, lidos de um ficheiro, passados como
argumentos de um subprograma ou, at mesmo, definidos como constantes dentro do prprio
programa.
Da mesma forma, os valores de interesse calculados pelo algoritmo so disponibilizados pelo
comando
parmetros de sada <lista-de-variveis>
podendo a <lista-de-variveis> ser ampliada ou reduzida pelo programados.

3.2. Variveis e comentrios


Uma varivel corresponde a uma posio de memria do computador onde est, ou poder estar,
armazenado um determinado valor. As variveis so representadas por identificadores que so
cadeias de carateres alfanumricos, podendo os elementos de vetores e matrizes ser referenciados
por subscritos ou ndices (por exemplo, vi ou v(i) e mij ou m(i,j)).
Um comentrio um texto inserido em qualquer parte o algoritmo para aumentar a sua clareza.
Este texto deve ser delimitado por chavetas ( { <texto> } ), como por exemplo, { clculo da raiz }.

3.3. Expresses e comando de atribuio


Existem trs tipos de expresses: aritmticas, lgicas e literais, dependendo dos tipos dos
operadores e das variveis envolvidas.
3.3.1. Expresses aritmticas
Expresso aritmtica aquela cujos operadores so aritmticas e cujos operandos so
constantes e/ou variveis aritmticas. A notao semelhante quela utilizada para representar

uma frmula como, por exemplo, (b 2 4 a c), cos(2 + x) ou massa x velocidade.


O smbolo usado para atribuir o resultado de uma expresso a uma varivel, ou seja,
<varivel> <expresso>
Por exemplo, velocidade deslocamento / tempo.

-5-

Captulo 1. Implementao de Algoritmos


A tabela seguinte apresenta algumas funes matemticas que podem ser usadas na elaborao
dos algoritmos, pois consideram-se predefinidas.
Funo

Descrio

Funo

Descrio

Trigonomtricas
sen

seno

cos

co-seno

tan

tangente

sec

secante

Exponenciais
exp

exponencial

log10

logaritmo decimal

loge

logaritmo natural

raiz2

raiz quadrada

Numricas
abs

valor absoluto

quociente

diviso inteira

arredonda

arredonda para o inteiro


mais prximo

sinal

sinal(x) = 1 (se x > 0),


0 (se x = 0), -1 (se x <0)

max

maior valor

resto

resto de diviso

min

menor valor

trunca

arredonda para baixo

3.3.2. Expresses lgicas


Uma expresso lgica aquela cujos operadores so valores lgicos e cujos operandos so
relaes e/ou variveis do tipo lgico. Uma relao uma comparao realizada entre valores do
mesmo tipo. A natureza da comparao indicada por um operador relacional definido conforme a
tabela seguinte, sendo que o resultado de uma relao ou de uma expresso lgica verdadeiro ou
falso.
Operador relacional

Descrio

>

<

maior que
maior ou igual a
menor que
menor ou igual a
igual a
diferente de

A tabela seguinte mostra os resultados obtidos com os operadores lgicos, sendo que V significa
verdadeiro e F falso.
e

ou

no a

-6-

Captulo 1. Implementao de Algoritmos


3.3.3. Expresses literais
Uma expresso literal formada por operadores literais e operandos, os quais so constantes
e/ou variveis do tipo literal.
O caso mais simples de uma expresso literal uma constante literal, a qual constituda por
uma cadeia de carateres delimitada por aspas, por exemplo, mensagem matriz singular.

3.4. Comandos de entrada e sada


O comando
leia <lista-de-variveis>
usado para indicar que a <lista-de-variveis> est disponvel para leitura nalgum dispositivo
externo. Por sua vez, o comando
escreva <lista-de-variveis>
deve ser utilizado para indicar onde certos valores de interesse esto disponveis no programa e
podem ser escritos nalgum dispositivo externo. Compete ao programador decidir pela ampliao da
<lista-de-variveis> ou mesmo a omisso do comando escreva.

3.5. Estruturas condicionais


O uso de uma estrutura condicional torna possvel a escolha dos comandos a serem executados
quando certa condio for satisfeita ou no, possibilitando, desta forma, alterar o fluxo natural de
comandos. Esta condio representada por uma expresso lgica. As estruturas condicionais
podem ser simples ou compostas.
3.5.1. Estrutura condicional simples
Esta estrutura apresenta a forma:
se <condio> ento
<comandos>
fimse
Neste caso, a lista de <comandos> ser executada se, e somente se, a expresso lgica <condio>
tiver como resultado o valor verdadeiro.
3.5.2. Estrutura condicional composta
Quando houver duas alternativas possveis, deve ser usada uma estrutura da forma seguinte:
se <condio> ento
<comandos_1>
seno
<comandos_2>
fimse

-7-

Captulo 1. Implementao de Algoritmos


Se a expresso lgica <condio> tiver como resultado o valor verdadeiro, ento a sequncia
<comandos_1> ser executada e a sequncia <comandos_2> no ser executada. Por outro lado, se
o resultado de <condio> for falso, ento ser a lista <comandos_1> a nica a ser executada.
3.5.3. Estruturas de repetio
Uma estrutura de repetio faz com que uma sequncia de comandos seja executada
repetidamente at que uma dada condio de interrupo seja satisfeita. Existem, basicamente,
dois tipos destas estruturas, dependendo se o nmero de repeties indefinido ou definido.
Nmero indefinido de repeties
Este tipo de estrutura de repetio apresenta a forma:
repita
<comandos_1>
se <condio> ento
interrompa
fimse
<comandos_2>
fimrepita
<comandos_3>
O comando interrompa faz com que o fluxo de execuo seja transferido para o comando
imediatamente a seguir a fimrepita, Assim, as listas <comandos_1> e <comandos_2> sero repetidas
at que a expresso lgica <condio> resulte no valor verdadeiro. Quando isso ocorrer, a
repetio ser interrompida (<comandos_2> no ser realizada) e a lista <comandos_3>, a seguir a
fimrepita, ser executada.
A forma repita-fimrepita o caso geral de uma estrutura de repetio, Se a lista <comandos_1>
no existir, ter-se- uma estrutura de repetio com interrupo no incio (estrutura enquanto). Da
mesma forma, se no houver a lista <comandos_2>, ento ser uma estrutura com interrupo no
final (estrutura repita-at).
Nmero definido de repeties
Quando se souber com antecedncia quantas vezes a estrutura deve ser repetida, pode ser usado
um comando de forma mais simples:
para <controle> <valor-inicial> at <valor-final> passo <delta> faa
<comandos>
fimpara
Nesta estrutura, atribudo inicialmente varivel <controle> o valor de <valor-inicial> e
verificado se ele maior do que o <valor-final>. Se for maior, a estrutura para-faa no ser
executada. Se for menor ou igual, ento os <comandos> sero executados e a varivel <controle>

-8-

Captulo 1. Implementao de Algoritmos


ser incrementada com o valor de <delta>. Novamente, verificado se a varivel <controle>
maior do que o <valor-final>; se no for maior, ento os <comandos> sero executados e assim
sucessivamente.
As repeties processam-se at que a varivel <controle> seja maior do que o <valor-final>.
Quando o incremento <delta> tiver valor 1, ento o passo <delta> pode ser omitido da estrutura
para-faa.

3.6. Falha no algoritmo


O comando
abandone
usado para indicar que haver uma falha evidente na execuo do algoritmo, por exemplo, uma
diviso por zero, ou o uso inapropriado de parmetros. Neste caso, a execuo ser cancelada.

3.7. Exemplo de algoritmo


Dado um vetor x com n componentes (elementos), elaborar um algoritmo para determinar a
mdia aritmtica x e o desvio padro s dos seus elementos, sabendo que
n

1
x =
x,e
n i=1 i
s =

( ))
n

1
x2 1 x
n 1 i=1 i n i=1 i

Algoritmo Mdia_desvio
{ Objetivos: Calcular mdia aritmtica e desvio padro }
parmetros de entrada n, x
{ tamanho e elementos do vetor }
parmetros de sada Mdia, DesvioPadro
Soma 0
Soma2 0
para i 1 at n faa
Soma Soma + x(i)
Soma2 Soma2 + x(i)2
fimpara
Mdia Soma / n
DesvioPadro raiz2 ((Soma2 (Soma2 / n)) / (n-1))
escreva Mdia, DesvioPadro
fimalgoritmo

-9-

Captulo 1. Implementao de Algoritmos

4. Notao matemtica
Definida a modelao matemtica por meio de expresses aritmticas e lgicas, o passo seguinte
passar desta notao matemtica para a notao algortmica. Esta passagem ilustrada pelos
exemplos que se seguem.
Exemplo 1: implementar um algoritmo para calcular a norma-2 (norma Euclidiana) de um vetor x
de tamanho n, definida pela seguinte expresso:
x 2 =

x i 2.
i=1

Algoritmo Norma2
{ Objetivos: Calcular a norma-2 (Euclidiana) de um vetor }
parmetros de entrada n, x
{ tamanho e elementos do vetor }
parmetros de sada N2
{ norma-2 do vetor }
Soma 0
para i 1 at n faa
Soma Soma + (abs(x(i)))2
fimpara
N2 raiz2(Soma)
escreva N2
fimalgoritmo
Exemplo 2: implementar um algoritmo para calcular a norma- (norma de mxima magnitude) de
um vetor x de tamanho n, definida pela seguinte expresso:
x = max

1in

xi .

Algoritmo NormaInf
{ Objetivos: Calcular a norma- de um vetor }
parmetros de entrada n, x
{ tamanho e elementos do vetor }
parmetros de sada Ninf
{ norma- do vetor }
Ninf abs(x(1))
para i 2 at n faa
se abs(x(i)) > Ninf ento

- 10 -

Captulo 1. Implementao de Algoritmos

Ninf abs(x(i))
fimse
fimpara
escreva Ninf
finalgoritmo

5. Complexidade computacional
usual definir-se uma funo de complexidade para medir o custo de execuo de um
algoritmo. Esta funo tanto pode ser uma medida do tempo necessrio para executar o algoritmo
que resolve um problema de tamanho n, como o espao de memria requerido para esta execuo.
Como os algoritmos aqui estudados so polinomiais e as operaes aritmticas tm diferentes
tempos de execuo pelo computador, a funo de complexidade ser definida, separadamente,
para a adio/subtrao, multiplicao e diviso.
A complexidade computacional de um algoritmo refere-se estimativa do esforo computacional
despendido para resolver o problema, sendo medido pelo nmero de operaes aritmticas e
lgicas efetuadas para resolver um sistema linear de ordem n.
Os problemas possuem complexidade computacional, podendo ser enquadrados em dois grupos:
grupo composto pelos algoritmos polinomiais, sendo a funo de complexidade da forma:
O(cn pn + cn-1 pn-1 + ... + c1 p1 + c0).
grupo formado pelos algoritmos exponenciais, sendo a funo de complexidade da forma:
O(cn), c > 1.
Exemplo:
Seja o polinmio de Lagrange de grau n definido da seguinte forma:
n

L n (x ) =

yi

i=0

j=0
ji

xx j
x i x j

Expandindo, resulta a Expresso 1 seguinte:


x x 1
x x 2
x x n
L n (x ) = y 0

...
x 0 x 1 x 0 x 2
x 0 x n
x x 0
x x 2
x x n
+ y1

...
x 1 x 0 x 1 x 2
x 1 x n
+ ...
x x 0
x x 1
x x n1
+ yn

...
x n x 0 x n x 1
x n x n1

- 11 -

Captulo 1. Implementao de Algoritmos


cujo algoritmo o seguinte:
Algoritmo Lagrange_Expresso_1
{ Objetivos: Interpolar usando polinmio de Lagrange }
parmetros de entrada m, x, y, z
{ nmero de pontos, abcissas }
{ ordenadas e valor a interpolar }
parmetros de sada r { valor interpolado }
r0
para i 1 at m faa
p y(i)
para j 1 at m faa
se i j ento
p p * ( (z x(j)) / (x(i) x(j)) )
fimse
fimpara
rr+p
fimpara
escreva r
fimalgoritmo
Considerando que o nmero de pontos m usados na interpolao igual a n+1, onde n o grau
do polinmio, ento a complexidade computacional do algoritmo :
m

2
2
2
Adies: 2(m 1) + 1 = 2(m 2m + m) = 2(n + 1) (n + 1) = 2n + 3n + 1 ;
i=1

Multiplicaes:

(m 1)

= m2 m = (n + 1)2 (n + 1) = n2 + n ;

i=1
m

Divises:

(m 1)

= (m2 m) = (n + 1)2 (n + 1) = n2 + n

i=1

Estes resultados so resumidos na tabela seguinte (complexidade de interpolao de Lagrange).


Operaes

Complexidade

Adies
Multiplicaes
Divises

2n2 + 3n + 1
n2 + n
n2 + n

O polinmio de Lagrange tambm pode ser expandido de modo a resultar a Expresso 2 seguinte:
(x x 1 ) (x x 2 ) ... (x x n )
L n (x ) = y 0
(x 0 x 1) ( x 0 x 2 ) ... (x 0 x n )

- 12 -

Captulo 1. Implementao de Algoritmos


(x x 0 ) (x x 2 ) ... (x x n )
+ y1
(x x ) (x x ) ... (x x )
1

+ ...
(x x 0 ) (x x 1 ) ... (x x n1 )
+ y0
(x n x 0 ) (x n x 1 ) ... (x n x n1)
Ao analisar-se a complexidade computacional do algoritmo desta expresso, verifica-se que o
nmero de adies o mesmo e o de multiplicaes da mesma ordem (n 2). No entanto, o nmero
de divises utilizadas na Expresso 2 de uma ordem grandeza a menos (n).
O polinmio de Lagrange serve para exemplificar que uma mesma notao matemtica pode
resultar em algoritmos de diferentes complexidades. Isto deve estar presente ao elaborar-se um
algoritmo.

6. Representao de nmeros
Nesta seco sero considerados aspetos bsicos relativos ao clculo numrico: a representao
de nmeros inteiros e de reais (em ponto flutuante) em cdigo binrio.

6.1. Representao de nmeros em diferentes bases


Nesta seco sero discutidos alguns mtodos para a mudana de base na representao de
nmeros, quer sejam inteiros ou reais. comum, para grande parte dos computadores atuais
utilizados na modelao computacional, o uso de uma base numrica distinta da base decimal. Em
geral, os nmeros so armazenados na base 2 (binria), existindo ainda plataformas que os
armazenam na base 8 (octal) ou na base 16 (hexadecimal). A representao de nmeros inteiros
ligeiramente distinta da representao de nmeros reais.
6.1.1. Representao de nmeros inteiros e converses de base
De uma forma geral, um nmero inteiro N representado, na base b, por um conjunto de dgitos
ai, (i = 0,1,, b-1 ), sendo que 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

- 13 -

Captulo 1. Implementao de Algoritmos


6.1.1.1. Representao de nmeros inteiros
H no mnimo duas formas de se representar um nmero inteiro N. O sistema posicional agrupa
os dgitos na forma de uma sequncia, na qual a magnitude da contribuio de cada dgito no
nmero depende da posio relativa que este ocupa. Neste sistema, o nmero N escrito como:
N = (an an-1 ... a1 a0)b
A contribuio de cada dgito para o valor de N fica explicitada na forma polinomial, onde N
escrito como (outra forma de representar um nmero):
N = an bn + an-1 bn-1 + ... + a1 b + a0
At aqui, N tem sido tratado de uma forma abstrata. No entanto, por uma questo evolutiva, N
tende a ser visto como um nmero 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, ento deve-se abordar as outras
representaes do ponto de vista de converses de ou para a base 10.
6.1.1.2. Converso pelo mtodo das divises sucessivas
Considera-se apenas a converso de um inteiro da base decimal (b = 10) para a base binria (b =
2), uma vez que esta ser a representao mais provvel num computador. Para realizar-se esta
converso de uma maneira prtica, pode-se usar o mtodo das divises sucessivas, no qual N e os
sucessivos quocientes qi so divididos por 2, sendo guardados os restos r i = 0,1 at que o ltimo
quociente seja qn = 0,1:
N = 2 q1 + r0; q1 = 2 q2 + r1; q2 = 2 q3 + r2; ... ; qn-1 = 2 qn + rn-1
O ltimo quociente (qn) somente ser 0 se N = 0. Ento,
N = (qn rn-1 ... r1 r0)2
ou
N = qn 2n + rn-1 2n-1 + rn-2 2n-2 + ... + r1 21 + r0 20
O mesmo mtodo pode ser utilizado para converter N para qualquer base b; divide-se N e os
sucessivos quocientes qi por b at que o ltimo quociente seja um inteiro 0 qn b-1:
N = b q1 + r0; q1 = b q2 + r1; q2 = b q3 + r2; ... ; qn-1 = b qn + rn-1
O ltimo quociente (qn) somente ser 0 se N = 0. Ento,
N = (qn rn-1 ... r1 r0)b
ou
N = qn bn + rn-1 bn-1 + rn-2 bn-2 + ... + r1 b1 + r0 b0.

- 14 -

Captulo 1. Implementao de Algoritmos


6.1.2. Representao de nmeros reais e converses de base
Neste momento, importante conhecer como os nmeros reais podem ser armazenados num
computador. Um nmero pode ser representado de duas formas:
com ponto fixo, por exemplo, 12.34
com ponto flutuante (ou vrgula flutuante), por exemplo, 0.1234x10 2.
6.1.2.1. Representao em formato de ponto fixo
Dado um nmero real X, este possui uma parte inteira X i e uma parte fracionaria Xf = X - Xi.
Desta forma, para se converter este nmero X na base binria utiliza-se o mtodo das divises
sucessivas para Xi, enquanto que para Xf usa-se o mtodo das multiplicaes sucessivas: multiplicase 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 fracionrio seja 0 ou que se obtenha um
padro repetitivo, em cujo caso o nmero fracionrio ser peridico. Este mtodo ser ilustrado
com dois exemplos.
Exemplo 1: Seja Xf = 0.8125, ento
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: Considere o nmero Xf = 0.1
Neste caso,
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 multiplicaes sucessivas repete a sequencia de dgitos 0011 ad infinitum.
Portanto,
0.1 = (0.0001100110011...)2 .
Este exemplo mostra a dificuldade de se obter a representao de um nmero fracionrio noutra
base.
Estes exemplos mostram que num computador, onde o espao para representao de um nmero
finito, estes nmeros tero que ser arredondados.
A forma polinomial de um nmero fracionrio dada por:
Xf = 1 2-1 + 2 2-2 + 3 2-3 + ...
Portanto, um nmero 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 + ...
= (an an-1 ... a1 a0 1 2 3 ...)2.

- 15 -

Captulo 1. Implementao de Algoritmos


6.1.2.2. Representao no formato de ponto flutuante
A forma geral de representao de um nmero real de ponto flutuante semelhante notao
cientfica:
d1 d2 d3 ... dp b e,
onde dk (k = 1,2,...,p) so os dgitos da parte fracionria (com 0 dk b-1, d1 0), b o valor da
base (geralmente 2, 10 ou 16), p o nmero de dgitos e e um expoente inteiro. Deste modo, um
nmero de ponto flutuante composto por trs partes: o sinal, a parte fracionria (denominada
tambm de significando ou mantissa) e o expoente. Estas trs partes tm um comprimento total
fixo que depende do computador e do tipo de nmero: preciso simples, dupla ou estendida.
Seja um hipottico computador com dois dgitos (p = 2), base b = 2 e expoente e {-1, 0, 1, 2}.
Como os nmeros reais so normalizados, isto , d1 0, todos eles sero da forma:

.10 2 2e ou

.112 2e , e =1, 0, 1,2.

Considerando a converso de binrio para decimal de um nmero menor do que 1,

.10 2 = 1 21 + 0 22 = 1/2 + 0 = 1/ 2, e
.112 = 1 21 + 1 22 = 1/2 + 1/4 = 3/ 4,
ento, os nicos nmeros positivos representveis neste computador so:

.10 2 21 = 1/2 1/ 2 = 1/ 4

.112 21 = 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 dgitos d k da mantissa e do expoente so


nulos (002 x 20). O mais importante a reter relativamente aos nmeros de ponto flutuante que
eles so discretos e no contnuos como um nmero real definido na Matemtica.
O conceito de existir sempre um nmero real entre dois nmeros reais quaisquer no vlido
para os nmeros de ponto flutuante. As consequncias da falha deste conceito podem ser
desastrosas, como se poder verificar no exemplo seguinte: considere a representao binria
0.610 = 0.100110011001...2 e 0.710 = 0.1011001100110...2.
Se estes dois nmeros forem armazenados naquele hipottico computador (com dois dgitos para
a mantissa), eles sero igualmente representados por: .10 2 x 20. Isto significa que tanto 0.6 10 como
0.710 so vistos como 0.510 por aquele computador. Esta uma grande causa de erro de
arredondamento nos processos numricos, como ser visto mais adiante neste documento.

- 16 -

Captulo 1. Implementao de Algoritmos


Por outro lado, como a forma de representao (nmero de dgitos da mantissa) de um nmero
de ponto flutuante pode ser diferente entre os fabricantes do 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 IEEE (Institute of
Electrical and Electronics Engineers), o qual apresentado na tabela que se segue.
Preciso

Propriedade
Comprimento total
bits na mantissa
bits no expoente
base
expoente mximo
expoente mnimo
maior nmero
menor nmero
dgitos decimais

Simples

Dupla

Estendida

32
23
8
2
127
-126
3.40 x 1038
1.18 x 10-38
7

64
52
11
2
1023
-1022
1.80 x 10308
2.123 x 10-308
16

80
64
15
2
16383
-16382
1.19 x 104932
3.36 x 10-4932
19

6.1.2.3. Aritmtica de ponto flutuante


Se uma operao aritmtica resultar num nmero que seja maior, em valor absoluto, que o
maior nmero representvel, ocorrer um overflow. Se, por outro lado, resultar num nmero que
seja menor, em valor absoluto, que o menor nmero representvel diferente de zero, ocorrer um
underflow. O modo de tratar overflow e underflow depender do compilador utilizado para gerar o
programa executvel.
A seguir, ser mostrado a preciso das operaes numricas envolvendo nmeros de ponto
flutuante. Para tal, ser utilizado um outro hipottico computador com dois dgitos (p = 2), base b
= 10 (para facilitar o entendimento) e expoente e {-5, , 5}: d1d2 x 10e.
Quando dois nmeros so somados ou subtrados, os dgitos do nmero de menor expoente
devem ser deslocados de modo a alinhar as casas decimais. O resultado , ento, arredondado para
dois dgitos 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 nmeros so armazenados no formato especificado, as casas decimais so alinhadas e a
operao de adio efetuada. O resultado arredondado para dois dgitos o seguinte:
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 adio 4.4 em vez de 4.384.


- 17 -

Captulo 1. Implementao de Algoritmos


Exemplo 2: 372 - 371
Os nmeros so armazenados no formato especificado, as casas decimais so alinhadas e a
operao de adio efetuada. O resultado arredondado para dois dgitos o seguinte:
372 - 371 = .37 x 103 + .37 x 103

= .37

x 103

- .37

x 103

= .00

x 103

.00

x 100.

O resultado da subtrao 0 em vez de 1. A perda de preciso quando dois nmeros


aproximadamente iguais so subtrados a maior fonte de erro nas operaes de ponto flutuante.
Exemplo 3: 691 + 2.71
Os nmeros so armazenados no formato especificado, as casas decimais so alinhadas e a
operao de adio efetuada. O resultado arredondado para dois dgitos o seguinte:
691 + 2.71 = .69 x 103 + .27 x 101 = .69

x 103

+ .0027

x 103

= .6927

x 103

.69

x 103.

O resultado da adio 690 em vez de 693.71. O deslocamento das casas decimais de 2.71 causou
uma perda total dos seus dgitos durante a operao.
Exemplo 4: 1234 x 0.016
Os nmeros so armazenados no formato definido e a multiplicao efetuada utilizando 2p = 4
dgitos na mantissa. O resultado arredondado para dois dgitos e normalizado:
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 multiplicao 19 em vez de 19.744.


Exemplo 5: 875 x 3172
Os nmeros so armazenados no formato definido e a multiplicao efetuada utilizando 2p = 4
dgitos na mantissa. O resultado arredondado, normalizado e, como o expoente e = 7 > 5 (mximo
definido para este hipottico computador), ento 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 nmero representvel por este computador (e {-5, , 5}).

- 18 -

Captulo 1. Implementao de Algoritmos


Exemplo 6: 0.00183 492
Os nmeros so armazenados no formato definido e a diviso efetuada utilizando 2p = 4 dgitos
na mantissa. O resultado arredondado para dois dgitos e normalizado:
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 nmeros so armazenados no formato definido e a diviso efetuada utilizando 2p = 4 dgitos
na mantissa. O resultado arredondado, normalizado e, sendo o expoente e = -6 < -5, ento 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 diviso um valor inferior ao menor nmero representvel por este comutador
(por definio, e {-5, , 5}), sem considerar o zero, que tem uma representao especial.
Uma das causas de se cometer erros quando se usa um computador deve-se converso de base.
Geralmente, um nmero fornecido ao computador na base 10 e, no entanto, ele armazenado na
base 2.
Quando os nmeros so inteiros, a representao exata, como, por exemplo, 44 10 = 1011002.
No entanto, um nmero com parte decimal pode resultar num nmero binrio com infinitos dgitos
(0.410 = 0.01100110...2) que tm que ser arredondados para o armazenamento num formato de
ponto flutuante.
6.1.3. Converso de nmeros inteiros da base b para a base decimal
Para introduzir a converso para a base decimal, ser usada novamente a base binria como um
primeiro exemplo. Seja o nmero N, representado na base binria por
N = (am am-1 ... a1 a0)2
a sua representao na base decimal pode ser obtida simplesmente pela soma do polinmio
N = am 2m + am-1 2m-1 + ... + a1 2 + a0
A operacionalizao desta soma pode ser obtida pelo Algoritmo de Horner e pela Diviso de Ruffini.

- 19 -

Captulo 1. Implementao de Algoritmos


6.1.3.1. Algoritmo de Horner
O nmero N pode ser obtido na base decimal atravs do clculo da sequncia:
bm

am

bm-1

am-1 + 2 x bm

bm-2

am-2 + 2 x bm-1

...

...

b1

a1 + 2 x b2

b0

a0 + 2 x b1

e ento,
N = b0
Exemplo: seja o nmero (11101)2.
Aplicando o algoritmo de Horner:
b4

a4

b3

a3 + 2 x b 4 = 1 + 2 x 1 = 3

b2

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 nmero inteiro na base b para a
base decimal. Considere o nmero
N = (am am-1 ... a1 a0)b
a sua representao 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 ento,
N = c0

- 20 -

Captulo 1. Implementao de Algoritmos


6.1.3.2. Diviso de Ruffini
equivalente ao mtodo anterior, diferindo apenas na disposio 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 ento,
N = b0
Exemplo: seja o nmero (11101)2.
Aplicando a Diviso de Ruffini:
a4

a3

a2

a1

a0

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 nmero inteiro na base b para a
base decimal. Considere o nmero
N = (am am-1 ... a1 a0)b
a sua representao na base decimal pode ser obtida da seguinte forma:
am
2
e ento,

cm

am-1

...

a2

a1

a0

b x cm

...

b x c3

b x c2

b x c1

cm-1

...

c2

c1

c0

N = c0
6.1.4. Converso de nmeros fracionrios da base b para a base decimal
Considere um nmero fracionrio com representao finita na base binria:
Xf = (0.a1a2an)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 mtodos enunciados
na seco anterior (Algoritmo de Horner e Diviso de Ruffini) com algumas modificaes.

- 21 -

Captulo 1. Implementao de Algoritmos


6.1.4.1. Algoritmo de Horner
No caso de um nmero fracionrio 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 ento,
N = b0
Exemplo: converter o nmero (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
6.1.4.2. Diviso de Ruffini
No caso de um nmero fracionrio na base 2, o algoritmo fica
an
1/2

an-1

...

(1/2) x bm

...

bn-1

...

bn
e ento,
N = b0

- 22 -

a2

a1

(1/2) x b3 (1/2) x b2 (1/2) x b1


b2

b1

b0

Captulo 1. Implementao de Algoritmos


Exemplo: Converter o nmero (0.10111)2 .
Aplicando o algoritmo, fica:
a5

a4

a3

a2

a1

(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 b1

(1/2) x (3/2) (1/2) x (3/4) (1/2) x (7/8) (1/2) x (23/16)

b5

b4

b3

b2

b1

b0

3/2

7/4

7/8

23/16

23/32

portanto,
(0.10111)2 = 23/32 = 0.71875
6.1.5. Nmero binrio infinito
Uma outra situao que pode ocorrer quando o nmero binrio for infinito, por exemplo,
atravs de uma sequncia de dgitos peridicos:
X f =(0, 1 2 ... n 1 2 ...m )2
onde 1 2 ... m indica que a sequncia de dgitos 1 2 ... m se repete ad infinitum. Na base
decimal, tal nmero 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 nmero 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)
1x
tem-se
1 + 2m + 22m + 23m + ... =

2m
(fazendo x = 2-m),
=
m
m
1 2
2 1

- 23 -

Captulo 1. Implementao de Algoritmos


obtendo-se

X f =1 21 + 2 22 + ... + n 2n + 1 21 + 2 22 + ... + m 2m

2mn
2m1

As duas expresses entre parnteses tm a mesma forma e podem ser calculadas diretamente
usando qualquer um dos mtodos descritos anteriormente.
Em geral, se o nmero fracionrio tem representao infinita peridica na base b,

X f =1 b1 + 2 b2 + ... + n bn + 1 b1 + 2 b2 + ... + m bm

bmn
b m1

onde as expresses entre parnteses podem ser calculadas diretamente ou utilizando quaisquer um
dos mtodos descritos anteriormente.

6.2. Operaes com nmeros binrios


Como a maioria dos computadores usa a base b = 2, estes executam operaes aritmticas com
nmeros que esto na representao binria. Para tal, as tabelas de operaes que se seguem so
automaticamente satisfeitas.
6.2.1. Adio binria
Uma adio no sistema binrio realizada da mesma forma que a adio no sistema decimal,
lembrando que, no sistema binrio, h apenas 2 dgitos. Esta operao realizada de acordo com
as seguintes regras (considerando os dois operados positivos):
0+0=0
0+1=1
1+0=1
1 + 1 = 0 (e vai 1 para o dgito de ordem superior)
1 + 1 + 1 = 1 (e vai 1 para o dgito de ordem superior)
Para somar nmeros com mais de 2 algarismos, utiliza-se o mesmo processo de transporte para a
coluna posterior, usado na adio decimal. Ter, no entanto, ateno aos limites das palavras.
Exemplo 1: 1012 + 0112 = 10002 (510 + 310 = 810)
[1]
+

[1]
1
0

[1]
0
1

1
1

Exemplo 2: 012 + 112 = 1002 (110 + 310 = 410)


[1]
+

[1]
0
1

1
1

0
- 24 -

Captulo 1. Implementao de Algoritmos


Exemplo 3: 10102 + 11112 = 110012 (1010 + 1510 = 2510)
[1]
+

[1]
1
1

[1]
0
1

1
1

0
1

Quando um dos operandos so nmeros binrios 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.
6.2.2. Subtrao binria
A subtrao anloga adio, sendo realizada de acordo com as seguintes regras:
0-0=0
0 - 1 = 1 (e pede emprestado 1 para o dgito de ordem superior)
1-0=1
1-1=0
Desta forma, a operao 0 - 1 resulta em 1, mas com o transporte de 1 para a coluna esquerda,
que deve ser acumulado ao subtraendo e, por consequncia, subtrado 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

Exemplo 2: 1112 - 1002 = 0112 (710 - 410 = 310)

1
1

1
0

1
0

Exemplo 3: 10102 - 10012 = 00102 (1010 - 910 = 110)

1
1

0
0

[1]
1
0

0
1
1

- 25 -

Captulo 1. Implementao de Algoritmos


6.2.3. Multiplicao binria
Procede-se como numa multiplicao no sistema decimal, de acordo com as seguintes regras:
0x0=0
0x1=0
1x0=0
1x1=1
Utiliza-se o mesmo mtodo que a multiplicao decimal: deslocamentos e adies. O nmero
maior deve ser colocado por cima do menor.
Exemplo 1: 1012 x 0112 = 0102 (510 x 310 = 1510)

1
0

0
1

1
1

0
1

1
0

1
0
0

Exemplo 2: 110102 x 0102 = 1101002 (2610 x 210 = 5210)

1
x

0
0

1
1

0
0

0
1
0

0
0

0
0
0

1
0

0
1
0

Exemplo 3: 10102 x 10002 = 10102 (1010 x 810 = 8010)

1
1

0
0

1
0

0
0

0
0

0
0

0
0
0

0
0
1

0
0
0
0

- 26 -

Captulo 1. Implementao de Algoritmos

6.2.4. Diviso binria


A diviso binria usa o mesmo mtodo que a diviso decimal: deslocamento e subtraes.
Exemplo 1: 1010102 1102 = 1112 (4410 410 = 1110)
[1] [1]
[1]
1 0
- 1
0

1
1

0
0

1
-

0
1

0
1

1
0

0
-

1
1
0

1
1
0

1
1

1
1

0
1

0
0
0

6.3. Representao de nmeros em computadores digitais


Nesta seco sero apresentadas algumas das representaes usadas para armazenar nmeros
inteiros e reais na memria de um computador. As representaes de nmeros inteiros e reais
apresentadas na seco anterior no so suficientes; necessrio distinguir-se, por exemplo, o
sinal do nmero. Como no existe a representao de um sinal + ou - na memria de um
computador, o recurso utilizado acrescentar um bit, para computadores binrios, ao nmero para
representar o sinal; este bit denominado bit de sinal.
6.3.1. Representao de nmeros inteiros
A representao mais direta de nmeros inteiros a denominada Sinal-Mdulo (tambm
denominada por Sinal-Magnitude). Nesta representao, o valor absoluto do nmero inteiro
obtido diretamente a partir dos algoritmos discutidos na seco anterior, enquanto que o sinal
representado por um dgito adicional colocado esquerda do nmero.
Quando a representao binria, o bit de sinal ocupa a posio do bit mais significativo. Ento,
supondo que a memria do computador dispe de q dgitos para a representao, um nmero
inteiro na base b ser representado no computador atravs da seguinte sequncia de dgitos:
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 nmero. Esta
sequncia de dgitos denominada palavra. Por exemplo, no sistema binrio convenciona-se usar
aq-1 = 0 para + e aq-1 = 1 para -.
A converso do nmero internamente representado por a q-1 aq-2 ...a1 a0 para o sistema decimal
realizado atravs de uma frmula semelhante forma polinomial:
a q1

N = (1)

q2

( ak bk ),

k=0

- 27 -

Captulo 1. Implementao de Algoritmos


em que,
N o nmero inteiro na base decimal
q-2 o ndice do dgito mais esquerda que representa o valor absoluto de N
b a base, s vezes denominada de radix (um inteiro maior que 1)
ak um dgito vlido na representao (0 ak < b), k = 0, 1, , q-1
Os valores em questo para as quantidades expressas na frmula anterior dependem da arquitetura
e do compilador utilizado. Por exemplo, um dado compilador possui 4 modelos de representao de
inteiros com 1, 2, 4 e 8 bytes, tambm denominados de espcies. Sendo para todos os casos b = 2,
o valor absoluto do maior nmero inteiro que pode ser representado internamente para cada
espcie Npmax , (p = 1, 2, 4, 8) , a partir da frmula anterior,

127 (p=1)
Npmax = 2k = 20 + 21 + 2 2 + ... + 28p2 = 28p1 1 = 32767 (p=2)
2147483647 (p=4)
k=0
9223372036854775807 (p=8)
8p2

A forma mais comum utilizada para representar nmeros negativos em binrio tomando o
dgito 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 binrio negativo em decimal: soma-se os bits ligados (com 1), considerando-se
os valores de -27, 26, , 20. Exemplos:
1

-128
1

-128

123
1

-128
1

-5 (123-128)
1

87
1

decimal

decimal
-41 (87-128)

127

decimal
-1 (127-128)

Existem outras representaes de nmeros inteiros em computadores, como por exemplo as


representaes em complemento a (b-1) e em complemento a b.
A representao de nmeros positivos em complemento idntica representao em SinalMdulo. A representao dos nmeros inteiros negativos obtida efetuando-se: (base - 1) menos
cada algarismo do nmero. Por exemplo, para calcular o complemento a (base - 1) do nmero
-29710 (como a base 10, ento 10 - 1 = 9, e o complemento a (base -1) ser complemento a 9);
como 999 - 297 = 702, o complemento a 1 do nmero -297 702.

- 28 -

Captulo 1. Implementao de Algoritmos


Para se obter o complemento a (b 1) de um nmero binrio, deve-se subtrair cada algarismo de
1 (b - 1 = 1); no entanto, como se trata de nmeros binrios que, para efetuar esta operao,
basta inverter todos os bits. Por exemplo, o complemento a 1 (C1) do nmero 0011 2 (usando 4
dgitos) 11002, pois 11112 00112 = 11002.
A quantidade de nmeros inteiros diferentes que se podem representar usando n posies num
sistema de base b bn. Por exemplo, na base 2, podem-se representar os seguintes nmeros: 2 1 at
um dgito (0, 1), 22 at dois dgitos (00, 01, 10, 11), 2 3 nmeros at trs dgitos (000, 001, 010, 011,
100, 101, 110, 111),
A tabela seguinte apresenta a representao em C1 dos nmeros binrios de 4 dgitos. Repare
como o espao de representao da base 2 com 4 dgitos est sendo usado na representao em C1
(note que h 2 representaes para o zero).
Decimal
(positivo)

Binrio em C1
(igual a sinal-mdulo)

Decimal
(negativo)

Binrio 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 representao na base 10 com 3 dgitos varia de 000 a 999 (10 3 representaes), representando
os nmeros 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 representao em C1 dos nmeros binrios de n dgitos a seguinte:
menor inteiro negativo: -(2n-1 1),
maior inteiro positivo: 2n-1 1.
Na aritmtica em complemento a (base - 1), basta somar os nmeros, sendo que um nmero
negativo ser representado por seu complemento a (base 1). Por exemplo, a soma decimal de 123
com -418 :
Sinal-Mdulo:
-418 + 123 = -295
Complemento a 9 (base - 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).
- 29 -

Captulo 1. Implementao de Algoritmos


De notar que nesta representao, a subtrao (ou soma de um nmero positivo com um nmero
negativo) transforma-se numa soma em complemento; isto , a soma dos complementos do nmero
positivo com o nmero negativo. Portanto, uma subtrao pode ser realizada simplesmente atravs
da soma dos nmeros complementados: manter o nmero se positivo e complementar o nmero
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-mdulo, uma vez que no requer nenhum teste. No entanto, continua-se
com duas representaes para o zero.
A representao dos nmeros inteiros negativos em complemento a base obtida subtraindo-se
da base cada algarismo do nmero. Por exemplo, na base 10 com 3 dgitos: 1000 x. Uma forma
alternativa subtrair cada algarismo de (base 1), isto , calcular o complemento a (base -1), e
depois somar 1 ao resultado. Ou seja, encontramos o complemento a (base - 1) do nmero (o que
facilita muito no caso dos nmeros binrios) e depois somamos 1 ao resultado.
Por exemplo, calcular o complemento a base (10) do nmero 29710 com 3 dgitos:
usando C10: 1000 297 = 703;
representar o nmero em C9 e somar 1 ao resultado: 999 297 = 702 702 + 1 = 703.
Por exemplo, calcular o complemento a base (2) do nmero 00112 com 4 dgitos:
usando C2: 10000 0011 = 01101;
representar o nmero em C1 e somar 1 ao resultado: 1111 0011 = 1100 1100 + 0001 =
1101.
Desta forma, para representar um nmero binrio negativo em complemento 2 (C2) consiste em
subtrair cada algarismo de 1 (C1) e depois somar 1 ao resultado.
A tabela seguinte apresenta a representao em C2 dos nmeros binrios de 4 dgitos.
Decimal
(positivo)

Binrio em C2
(igual a sinal-mdulo)

Decimal
(negativo)

Binrio em C2

0
1
2
3
4
5
6
7

0000
0001
0010
0011
0100
0101
0110
0111

-1
-2
-3
-4
-5
-6
-7
-8

1111
1110
1101
1100
1011
1010
1001
1000

Comparando com a tabela anterior (para C1), nota-se que os nmeros positivos tm a mesma
representao de C1 e que o zero passou a ter apenas uma representao, o que permitiu
representar mais um nmero (neste caso, mais um negativo pode ser representado).

- 30 -

Captulo 1. Implementao de Algoritmos


A faixa de representao em C2 dos nmeros binrios de n dgitos a seguinte:
menor inteiro negativo: - 2n-1,
maior inteiro positivo: 2n-1 1.
Na aritmtica em complemento a base, basta somar os nmeros, sendo que um nmero 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
nmeros a serem representados. Por exemplo, quando se usam palavras de 4 bits (um para o sinal),
o valor 9 no tem associado qualquer palavra; por isso no se consegue uma resposta certa para a
soma de 5 com 4 (0101 + 0100 = 1001 que -7). A adio de dois nmeros no sistema de
representao em C2 segue duas regras:
1. Somar os dois nmeros e observar se ocorre transbordo (vai 1) sobre o bit de sinal e se
ocorre o transbordo aps o bit de sinal.
2. Se ocorrer um e somente um dos dois transbordos, ento houve overflow; caso contrrio o
resultado da soma est dentro do campo de definio.
As vantagens do uso do complemento de 2 que existe apenas um zero e que as regras para
soma e subtrao so as mesmas. A desvantagem o fato de ser um cdigo assimtrico: o nmero
de representaes negativas maior que o nmero de representaes positivas. Por exemplo, com
8 bits em complemento de 2 podem-ses representar os nmeros decimais entre -128 e +127.
Exerccios. Considerando nmeros binrios com 4 bits (n = 4, um o de sinal) e calcule as seguintes
somas e verifique se existe overflow:
1. 0101 + 0110 (5 + 6 = 11)

2. 0101 + 0010 (5 + 2 = 7)

3. 0101 + 1010 (5 6 = -1)

4. 0110 + 1011 (6 5 = 1)

5. 1011 + 1010 (-5 - 6 = -11)


A representao de um nmero inteiro num computador exata. Operaes aritmticas entre
nmeros inteiros tambm exata, sob as seguintes condies:
1. o resultado no pode encontrar-se fora do intervalo de nmeros inteiros que podem ser
representados;
2. a diviso somente pode ser realizada entre nmeros exatamente divisveis, isto , a parte
fracionria deve ser nula.
6.3.2. Representao de nmeros reais
A representao de nmeros reais em computadores denomina-se por representao de ponto
flutuante normalizado, na qual um nmero representado internamente atravs de uma notao
cientfica: um bit de sinal s (interpretado como positivo ou negativo), um expoente inteiro exato e

- 31 -

Captulo 1. Implementao de Algoritmos


e uma mantissa inteira positiva M, sendo que apenas um nmero limitado de dgitos permitido
para e e M. Tomando todas estas quantidades juntas, estas representam o nmero

x = s (0. d1 d2 ... dn ) be
o qual est escrito numa forma legvel para os seres humanos. Alm das quantidades j definidas na
frmula anterior, os dgitos d1, d2, , dn so limitados pela base b (d1 0 e 1 di b-1, i = 1, , n)
e o expoente limitado ao intervalo emin e emax . Adicionalmente, n 1 denominado de
nmero de dgitos do sistema e define o tamanho da mantissa M = 0. d1d2...dn.
O valor zero no pode ser normalizado e tem representao especial, com mantissa nula (todos
dgitos iguais a zero) e expoente o menor possvel (m1). O conjunto formado pelo zero e por todos
os nmeros em notao de ponto flutuante chamado Sistema de Ponto Flutuante na base b com
n algarismos significativos, denota-se por F(b, n, emin, emax).
Contudo, um computador apenas pode representar os valores de e e M atravs de dgitos na base
b. Um computador digital (b = 2), por exemplo, dispe sempre de um tamanho de palavra finito,
isto , o nmero total de bits que podem ser utilizados para representar s (1 bit), a parte
exponencial e a mantissa sempre fixo, para um dado tipo de nmeros reais. Um nmero real de
preciso simples, por exemplo, normalmente representado por uma palavra de 4 bytes (32 bits),
sendo que 1 bit utilizado para representar o sinal, enquanto que 8 bits so utilizados para
representar a parte exponencial e os restantes 23 bits para representar a mantissa. Desta forma,
tal nmero ser representado na memria do computador como
x = s e 7 e6 ... e 1 e0 d1 d2 ... d22 d23,

onde

{ s , e0 , ... , e7 , d1 , ..., d 23 } { 0, 1 }.
Exemplo: Considere-se dois nmeros binrios com 8 algarismos significativos em F(2, 8, -4, 3):
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 representao utilizado, n1 e n2 so dois nmeros consecutivos, ou
seja, no podemos representar nenhum outro nmero que tenha valor intermedirio. Portanto, por
exemplo, a quantidade 3.60000 no tem representao exata neste sistema, sendo representada
por n1 ou n2, o que gerar um erro, denominado Erro de Arredondamento. Assim, enquanto os
nmeros reais podem ser representados por uma reta contnua, em notao de ponto flutuante
somente podemos representar pontos discretos da reta real.
A tabela que se segue ilustra representaes de ponto flutuante para alguns nmeros numa
palavra tpica de 32 bits (4 bytes), em F(2, 23, -128, 127).

- 32 -

Captulo 1. Implementao de Algoritmos

nmero

binrio (base 2)

decimal (base 10)

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 converso do nmero x aqui representado para a base decimal pode ser realizada pela frmula
polinomial seguinte:
x = (1)s be

( dk bk ).

k=1

No padro IEEE 754, a sequncia de 8 bits armazena o nmero E = e + 127. Desta forma, evitase
o teste sobre o valor do bit para saber se o nmero positivo ou negativo e para recuperar o
expoente, realizada a operao e = E 127. Para se obter a forma como o expoente ser
armazenado pode-se tambm trabalhar na base 10 e depois converter o resultado final. Por
exemplo, se e = 5210 vai-se armazenar 12710 + 5210 = 17910 = 101100112.
importante destacar que as sequncias de bits para o expoente: 00000000 e 11111111 so
reservadas para representar o zero e infinito ou ocorrncia de erro (NaN: not a number)
respetivamente. O maior expoente representado pela sequncia 11111110 2 que, na base 10,
representa o nmero (256 2)10 = 25410. Ento o maior expoente : 127 + e = 254 e = 254 127 =
127. O menor expoente representado pela sequncia 00000001 2 = 110. Da que o menor expoente
: 127 + e = 1 e = 1 127 = 126.
Considerando agora a representao da mantissa. Como no sistema normalizado d1 0 e dado
que a base 2, ento primeiro dgito no sistema normalizado ser sempre igual a 1 e por esta razo
no armazenado ( o denominado bit escondido). Esta normalizao permite um ganho na
preciso, pois pode-se considerar que a mantissa armazenada em 24 bits.
A tabela seguinte mostra os valores de n, e min, emax, Xmin, Xmax e Xeps para um dado computador
que usa o padro IEEE 754.
Espcie

REAL (4)

REAL (8)

REAL (16)

23
-126
127
1.1754944 x 10-38
3.4028235 x 1038
1.1920929 x 10-7

52
-1022
1023
2.225073858507201 x 10-308
1.797693134862316 x 10308
2.220446049250313 x 10-16

113
-16382
16383
3.362103143112093506... x 10-4932
1.189731495357231765... x 104932
1.925929944387235853... x 10-34

emin
emax
Xmin
Xmax
Xeps

- 33 -

Captulo 1. Implementao de Algoritmos


Para uma base b qualquer, os nmeros do sistema de ponto flutuante F = F[ b , n, e min , e max ]
contm as seguintes caractersticas:
O menor nmero positivo que pode ser representado neste sistema
e min

x min = 0.1 b

Valores para xmin vlidos para o compilador so apresentados na tabela anterior. Isto
significa que qualquer nmero x tal que
x min < x < x min

no poder ser representado pelo computador. Esta ocorrncia denominada de underflow.


Os compiladores podem ser instrudos para terminar o processamento neste ponto,
disparando uma mensagem de erro, ou ento seguir o processamento arredondando x = 0.
O maior nmero positivo que pode ser representado neste sistema
x max = 0.(b1)(b1)...(b1) b

( )
n

max

= (b1)

n vezes

bk

max

= (1 bn ) b

max

k=1

Isto significa que qualquer nmero x tal que


x < x max ou x > x max
no poder ser representado pelo computador. Esta ocorrncia denominada overflow. Os
compiladores usualmente tomam duas possveis providncias quando detetam um overflow:
param o processamento do programa emitindo uma mensagem de erro, ou continuam o
processamento atribuindo a x o valor simblico x = -Infinito ou x = Infinito.
O maior nmero que pode ser somado ou subtrado a 1.0, com o resultado permanecendo
indistinguvel de 1.0

x eps = b 1n
A quantidade xeps (denominada de epsilon da mquina, m, ou de preciso da mquina).
Somente um conjunto finito R F de nmeros racionais podem ser representados na forma
apresentada. Os nmeros neste conjunto so denominados nmeros de ponto flutuante.
Para uma representao normalizada (d1 0), este conjunto contm precisamente
2(b1) e max e min + 1 bn1 + 1

nmeros racionais.
Exemplo: Considere o sistema de representao numrica de ponto flutuante F(2, 4, -5, 6). Para
este sistema:
o menor nmero positivo possvel :
x min = (0.1000)2 25 = 251 =

- 34 -

1
;
64

Captulo 1. Implementao de Algoritmos


ou seja, a regio de underflow consiste no intervalo

1
1
< x <
64
64

O maior nmero positivo possvel :


x max = (0.1111)2 2 6 = (1 24 ) 26 = 60;
ou seja, as regies de overflow consistem nos intervalos
x < 60 e x > 60.
O maior nmero que pode ser somado ou subtrado de 1.0 e que mantm o resultado
inalterado :
x eps = 214 =

1
.
8

O nmero de elementos em RF :
2 1 (6 + 5 + 1) 241 + 1 = 193.

7. Erros
7.1. Fontes de erros e incertezas
Embora se procure sempre solues exatas dos problemas que se nos surgem, raramente este
objetivo atingido. Erros e incertezas podem ser introduzidos em cada etapa da formulao e
resoluo dos problemas. A natureza das incertezas que surgem quando se procura a soluo de um
problema ser abordada nesta seco. Tambm sero examinados, com um certo grau de detalhe,
os erros introduzidos pela computao numrica, destinada a determinar a soluo desejada.
O processo de resoluo de um problema at implementao do mtodo pode ser dividido em
quatro fases (no tem em conta as fases de determinao e anlise da soluo):
1. Definio do problema,
2. Formulao precisa de um modelo matemtico e o seu modelo numrico relacionado,
3. Construo do mtodo destinado a resolver o modelo numrico,
4. Implementao do mtodo para calcular a soluo.
Na discusso que ser feita a respeito das fontes de erro no clculo numrico, no sero
considerados erros triviais que podem ser evitados, tais como copiar uma frmula erroneamente ou
efetuar um erro de sintaxe na programao, muito embora tais erros ocorram e perfaam uma
frao considervel do esforo e do tempo despendidos ao se trilhar as fases mencionadas acima.
Desta forma, esta seco tratar apenas dos erros que resultam de forma inevitvel, dada a
prpria natureza da representao finita de nmeros num computador e/ou da implementao
numrica de um determinado clculo. As incertezas introduzidas contaminam a soluo e
importante tentar-se balancear as incertezas. Se a incerteza no modelo matemtico de 1%, ento
- 35 -

Captulo 1. Implementao de Algoritmos


no faz sentido a implementao de um modelo numrico e de um mtodo que atinja 6 dgitos de
preciso, por exemplo.
O diagrama da figura seguinte ilustra o processo usualmente percorrido para se determinar uma
soluo para um problema fsico real a partir de uma modelao, inicialmente matemtica, seguida
por uma modelao computacional e, finalmente, passando pela implementao do mtodo
numrico a partir da modelao computacional, seguida pela obteno dos resultados. As
incertezas ocorrem desde a fase de modelao matemtica at a soluo numrica.

Problema Real

Formulao dos Modelos


Matemtico e Numrico

Construo do Modelo

Incertezas

Implementao do Mtodo Soluo Numrica

7.2. Preciso e exatido


A preciso refere-se ao quo prximo um nmero representado pelo computador representa o
nmero que ambiciona representar. A preciso de um nmero caracterizada pelo nmero de
dgitos usados na representao e na lgebra. Assim, a constante ser representada com maior
preciso utilizando 8 bytes do que utilizando 4 bytes, para armazenar o nmero.
A exatido refere-se a quo prximo um nmero representado pelo computador (como resultado
de uma srie de operaes, por exemplo) est do valor correto do nmero que ele almeja
representar. A exatido caracterizada pelos erros (de truncamento e arredondamento) no mtodo
numrico utilizado. Assim, se os nmeros 1 = 3.1416304958 e 2 = 3.1415809485 almejam
representar o mesmo nmero = 3.141592654 , o nmero 2 possui maior exatido do que 1,
embora ambos possuam a mesma preciso.
Os conceitos de preciso e exatido so muitas vezes confundidos entre si. frequente, em
linguagem coloquial, referir-se preciso quando na verdade o correto seria referir-se exatido
de um resultado. As subseces seguintes indicam como se pode medir a exatido de um nmero
atravs do clculo dos erros absoluto e relativo do mesmo.

- 36 -

Captulo 1. Implementao de Algoritmos

7.3. Tipos de erros


Durante as etapas de resoluo de um problema, surgem erros de vrias origens que podem
alterar profundamente os resultados (solues) obtidos. de importncia fundamental conhecer as
causas desses erros para minimizar as suas consequncias. Os erros podem-se dividir em dois tipos:
os associados construo dos modelos matemticos e implementao dos algoritmos, como
sejam os erros de modelao, iniciais e grosseiros, e os erros associados representao de
entidades numricas nas mquinas e s operaes que um computador pode realizar, nos quais se
incluem os erros de arredondamento e de truncatura.
7.3.1. Erro de formulao ou de modelao
Este tipo de erros est relacionado com uma certa tendncia de alguns utilizadores no
completarem, com algum rigor, o modelo matemtico. Nesta situao, deve-se ter conscincia do
facto de que se est a trabalhar com um modelo mal construdo e no adequado realidade fsica.
Desta forma, nenhum mtodo numrico poder originar resultados precisos.
7.3.2. Erros iniciais (incertezas dos dados do modelo)
Na etapa da modelao matemtica de um problema real, muitas vezes necessrio usar dados
obtidos por medidas experimentais. Nesta fase, tanto pode ocorrer uma modelao incorreta, em
que a expresso matemtica no reflete adequadamente o fenmeno fsico, como os dados terem
sido obtidos com pouca exatido. Nestes casos, necessria a realizao de testes para verificar o
quanto os resultados so sensveis s alteraes dos dados fornecidos (anlise de sensibilidade).
Grandes alteraes nos resultados devido a pequenas variaes nos dados so sintomas de um
mal condicionamento do modelo proposto, havendo necessidade de uma nova modelao do
problema. Um problema matemtico cuja soluo obtida (resultados) muito sensvel a variaes
nos dados e parmetros do problema diz-me mal condicionado; diz-me bem condicionado se
pequenas variaes nos dados e parmetros induzem sempre pequenas variaes na soluo.
7.3.3. Erro grosseiro
A possibilidade de um computador cometer um erro muito baixa; no entanto, podem ser
cometidos erros na elaborao do algoritmo, quer na sua implementao como na introduo dos
dados iniciais. Executar o programa com dados iniciais cujos resultados (soluo) so 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 especficos. O ideal seria elaborar
uma prova de correo de programa, o que uma tarefa no trivial.
7.3.4. Erro de arredondamento
Um qualquer nmero decimal, por exemplo 0.410 (base 10), no pode ser representado
exatamente num computador porque tem que ser convertido em binrio (base 2) e armazenado
- 37 -

Captulo 1. Implementao de Algoritmos


num nmero finito de bits. O erro causado por esta imperfeio na representao de um nmero
denominado de erro de arredondamento. As causas e consequncias deste tipo de erros sero
abordadas na prxima seco.
7.3.5. Erro de truncatura
O erro de truncatura devido aproximao de um problema por outro, como por exemplo a
substituio de um problema contnuo por um discreto. sabido que, para avaliar uma funo
matemtica no computador, somente as operaes aritmticas e lgicas podem ser requeridas, por
serem as operaes que ele capaz de efetuar. Por exemplo, para avaliar f(x) = sen(x) esta tem
que ser aproximada por uma srie, tal como
sen(x ) =

2n+1

x
(1)n (2n+1)!

= x

n=0

x3
x5
x7
+

+ ..., 0 x
6
120 5040
4

medida que n aumenta, mais o valor da srie se aproxima do valor real. A tabela que se segue
mostra a diferena entre o valor obtida pela srie 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 so devidos s
vrias truncaturas da srie:
2n+1

x
(1)n (2n+1)!

sen(x )

n=0

x
0
/16
/8
/6
/4

t=2
2,4
7,8
3,3
2,5

t=3

0
x 10-6
x 10-5
x 10-4
x 10-3

2,2
2,9
2,1
3,6

0
x 10-9
x 10-7
x 10-6
x 10-5

t=4
0
1,2 x 10-12
6,1 x 10-10
8,1 x 10-9
3,1 x 10-7

7.4. Valores aproximados e erros


Ao resolver um problema numrico no computador obtm-se, em geral, um valor aproximado
para a soluo exata do problema. assim importante poder avaliar a qualidade da aproximao,
isto , estimar ou limitar a discrepncia entre a soluo aproximada calculada e a soluo exata.
7.4.1. Erro absoluto
Seja X o valor exato de um nmero e fl(X) o seu valor aproximado por uma representao de
ponto flutuante. O erro absoluto (EAX) definido como o valor absoluto da diferena 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.

- 38 -

Captulo 1. Implementao de Algoritmos


Como para a maior parte dos problemas X desconhecido, no possvel calcular o erro
absoluto, sendo apenas possvel estimar-se o seu valor. Geralmente conhece-se a quantidade no
negativa dX, tal que
EAX = | X - fl(X) | dX ,
que se denomina por um limite superior do erro absoluto. Desta relao pode-se concluir que o
valor exato pertence ao intervalo
fl(X) - dX X fl(X) + dX .
Por exemplo, Arquimedes estimou o valor de atravs da mdia do permetro de polgonos que
estavam contidos numa circunferncia de raio unitrio e de polgonos que continham a
circunferncia. Fazendo uso deste mtodo, Arquimedes foi capaz de estimar
min = 3.1409... = 3 +

1137
1335
< < max = 3 +
= 3.1428...
8069
9347

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 mdia entre pmin e pmax.
Portanto, Arquimedes poderia afirmar que
=

1
1
min + max

min = 3.14187 0.00096.


2
2 max

7.4.2. Erro relativo


Seja X o valor exato de um nmero 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 fl( X)

.
X
X

Como para a maior parte dos problemas X desconhecido, usual substitu-lo pelo valor
aproximado fl(X) no denominador da expresso para o erro relativo, como a seguinte:
ER X =

EAX

fl( X)

X fl(X )

fl(X)

fl( X)

O erro relativo no tem dimenso e, em geral, s conhecido o limite superior do seu valor, X, o
qual se define da seguinte forma:
X ERX.
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,
- 39 -

Captulo 1. Implementao de Algoritmos


ERp = 3.9262 10-4 para pmax e,
ERp = 8.7674 x 10-5 para a mdia.
Em geral, a melhor medida para se estimar a preciso de uma aproximao o erro relativo,
pois este indica diretamente o nmero de dgitos significativos corretos na aproximao.
7.4.3. Frmula fundamental dos erros
Considere-se um determinado problema de clculo numrico, Y = f(X). Mesmo que seja possvel
executar f de forma exata, qualquer perturbao no valor dos dados ir afetar o valor dos
resultados; so os erros de propagao: Y = f (X). Por outro lado, mesmo que os dados sejam
exatos, o mtodo de clculo pode ser aproximado; os resultados viro afetados de erros gerados:
Y = f (X). Na maior parte das vezes, ocorrem sucessivas combinaes desses dois tipos de erros:
Y = f (X).
A frmula fundamental do clculo dos erros serve para indicar como se propagam os erros ao
longo do processo de clculo numrico. Seja Y = f(X), onde f uma funo continuamente
diferencivel em R. Admita-se que Y = f (fl(X)), isto , Y obtido usando aritmtica exata com
dados ligeiramente perturbados (fl(X)). Ento, usando o Teorema do Valor Mdio (T.V.M.), obtm-se
os seguintes resultados:
(a)

EA Y = Y Y , por definio de erro absoluto


= f (X ) f (fl( X)) , por hiptese
= f '() X fl( X) , (X, fl(X)) (pelo T.V.M.)
= f '() EA X, por definio de erro absoluto
EA Y = f ' ( ) EA X

(b)

ER Y =
=

EA Y

, por definio de erro relativo

f ' ( )X fl(X)
Y

, pela alnea anterior

X f '() X fl(X)
Y
X

X f '()
ER X, por definio 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)

- 40 -

Captulo 1. Implementao de Algoritmos

Normalmente

X f ' (X)
designado por nmero de condio de f em X e nota-se por cond f(X).
f (X)

Este valor, cond f(x), um indicador do efeito da propagao do erro relativo, no valor da funo f
no ponto X, e permite avaliar em que condies a funo bem ou mal condicionada.
Exemplo: analisar os efeitos da propagao de erros nas funes x n e nx com n N.
(a) f(x) = xn, com n N.
cond f (x) =

x n xn1 = n
x f ' (x )
=
f (x)
xn

Verifica-se que a propagao do erro relativo depende apenas de n e no de x.


(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 propagao do erro relativo depende de x mais do que de n.
7.4.4. Nmero de dgitos significativos
Quando se contabiliza o nmero de dgitos de um valor numrico, no se deve incluir os zeros no
incio do nmero, uma vez que estes zeros somente auxiliam a localizar a posio ideal do ponto
decimal. Caso se queira contar o nmero de decimais, ento os zeros direita do ponto decimal
devem ser includos. Por exemplo, o nmero 0.00147 dado com trs dgitos mas possui cinco
decimais. O nmero 12.34 dado com quatro dgitos, mas possui apenas dois decimais.
Quando se trabalha com uma representao de um nmero obtida por meio de um processo de
arredondamento ou truncatura, uma maneira alternativa para se estimar a qualidade da
aproximao, ou seja, a exatido do nmero, consiste em calcular o nmero de dgitos
significativos corretos da representao.
Se fl(X) uma aproximao de X ento diz-se que fl(X) aproxima X com k dgitos significativos se
EA X = X fl(X)

1 s+1k
b
,
2

sendo s tal que bs |X| bs+1 .


O dgito significativo do valor aproximado que se encontra mais esquerda chamado de digito
mais significativo e o mais direita digito menos significativo. O nmero de dgitos significativos
dum valor aproximado d boa informao sobre a qualidade dessa aproximao. Existe uma relao
entre o nmero de dgitos significativos dum valor aproximado dum nmero e o erro relativo desse
valor. Com efeito, se fl(X) uma aproximao para X com k dgitos significativos corretos numa
representao de base b, ento
ER X =

X fl(X )
1 k+1

b
X
2
- 41 -

Captulo 1. Implementao de Algoritmos


onde k o maior nmero inteiro positivo para o qual a desigualdade acima verificada.
Exemplo: sejam b = 10, X = 1/6 e fl(X) = 0.16667; ento
ER X =

1/ 6 0.16667
1
= 2 105 105+1 .
1/6
2

Ou seja, o nmero de dgitos significativos em fl(X) k = 5.

7.5. Erros de arredondamento


O tamanho finito da palavra utilizada num computador digital para a representao de nmeros
de ponto flutuante provoca o aparecimento de diversos tipos de erros. Uma estratgia para reduzir
estes erros, usada na maioria dos computadores, consiste em utilizar nmeros de ponto flutuante
normalizados, isto , nmeros cuja mantissa M est sempre dentro do intervalo
1
M < 1,
b

ou seja, 0.5 M 1 para computadores de base b = 2. Esta providncia diminui o nmero de zeros
direita do ponto e maximiza o nmero de dgitos no nulos utilizados para representar um dado
nmero.
No entanto, mesmo num sistema com representao normalizada, nem todos os nmeros reais
podem ser representados. Utilizando o exemplo do sistema F(2, 4, -5, 6), o nmero racional
y = 0.12345999...
no 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 operaes:
y2 = 24 + 25 + 26 + 27 + 28 + 29 + 212 + 213 + 215 + ...
= 23 ( 21 + 22 + 23 + 24 + 25 + 26 + 29 + 210 + 212 + ... )
= ( 0.111111001101... ) 23,
o qual est agora na forma normalizada. De acordo com a expresso apresentada na seco 6.3.2
(pg. 31), ento podemos identificar
M = 0.111111001101... e e = -3.
Contudo, para o sistema F(2, 4, -5, 6), pode-se usar apenas 4 dgitos na mantissa. Desta forma, uma
possvel aproximao para y2 :
fl(y2) = (0.1111) x 2-3,
o qual corresponde ao seguinte nmero na base 10:
fl(y) = 0.1171875 ,
resultando nos seguintes erros absoluto e relativo:
EAy = 6.272 x 10-3 e ERy = 5.3525 x 10-2 = 5.35%.
- 42 -

Captulo 1. Implementao de Algoritmos


Este procedimento de aproximao denominado de arredondamento por defeito ou corte do
nmero.
Considere-se um nmero X na forma normalizada que no possua representao exata no sistema
F(b, n, emin, emax). Sejam X o maior nmero representvel no sistema menor que X e X o menor
nmero representvel no sistema maior que X. Ento,
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 en

ou seja,
X = 0. d1 d2 ... dn b e + g X b en

com

g X = 0.dn+1 ...

g X < 1

em que gX be-n a parcela de X que no includa na sua representao. Existem duas formas de se
realizar a aproximao: arredondamento por defeito (ou corte do nmero) e simtrico.
7.5.1. Arredondamento por defeito (ou corte do nmero)
O arredondamento por defeito consiste simplesmente em ignorar gX. Assim,
fl(X ) = 0. d1 d2 ... dn b e

o qual representvel no sistema. Neste caso, o erro absoluto cometido por corte
EA X = X fl(X) = g X b en < ben

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 ben

bn
=
<
= b1n
e
1
0.
d
d
...d
0. d1 d2 ...d n b
b
1 2
n

pois 0.d 1 d 2 ... dn b1 e

g X b en be

gX < 1, obtendo-se, desta forma, um limite superior para o erro

relativo, ao qual tambm se d o nome de unidade de erro de corte.


Desta forma, podem ser enunciados os resultados que se seguem, relacionando o nmero de
dgitos significativos de um valor aproximado de um nmero com o seu erro relativo.
Teorema: Se o dgito mais significativo do valor aproximado de um nmero d 1 0 e se esse valor
tem k dgitos significativos, ento o seu erro relativo no excede b1-k.

- 43 -

Captulo 1. Implementao de Algoritmos


Corolrio: Se o erro relativo do valor aproximado de um nmero no excede (1/2) b-k, ento esse
valor tem k dgitos significativos.
Para o exemplo anterior, no sistema de representao F(2, 4, -5. 6), pode-se escrever:
y2 = ( 0.1111) 23 + g y 234 , sendo gy = (0.11001101...)
Ento, efetuando o arredondamento por defeito obtm-se fl(y 2).
7.5.2. Arredondamento simtrico
No arredondamento simtrico, executa-se a seguinte operao:

fl(X ) =

{
{

1
se g X <
2
1
0. d1 d2 ...(dn+1) b e , se g X
2

( 0. d1 d2 ... dn) b
(

Neste caso, o erro absoluto cometido por arredondamento simtrico

EA X =

1
se g X <
2
1
en
gX 1 b
, se g X
2

gX ben ,

<

1 en
b
,
2

de onde se obtm uma estimativa superior para o erro absoluto.


O erro relativo cometido por arredondamento simtrico

ER X =

(
(

1 en
b
2

0.d 1 d 2 ... dn b

1
se g X <
2

1 en
b
2

1
, se g X
2
0.d 1 d 2 ...(dn +1) b

<

1 en
b
2
e

( 0.1)b b

1 1n
b
2

o qual fornece uma estimativa superior para o erro relativo, ao qual tambm se d o nome de
unidade de erro de arredondamento.
No exemplo acima, como gy > 12, deve-se somar 1 ao dgito d 4 resultando, com o auxlio da
tabela de adio de binrios,
fl(y 2 ) = (0.1111) 23 + (0.0001) 23 = (1.0000) 23 = (0.1000) 22 ,
Neste caso, obtm-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%.

- 44 -

Captulo 1. Implementao de Algoritmos


Os computadores mais recentes modificam ligeiramente o arredondamento em relao frmula
apresentada antes. Nesta, o ltimo dgito significativo (d n) no ser alterado se |gX| < 12 e ser
alterado se |gX| 12. H, portanto, uma ligeira preferncia para a alterao de d n no processo de
arredondamento, o que insere um erro sistemtico no processo. Atualmente, se |g X| = 12, o valor
de dn ser alterado somente em metade das situaes, segundo algum critrio. Este critrio pode
ser, por exemplo, a paridade de d n. Assim, para b = 10, o nmero 12.5 seria arredondado para 12,
enquanto que 13.5 seria arredondado para 14 (critrio denominado por arredondamento par).
7.5.3. Erros de arredondamento na lgebra de ponto flutuante
A frmula fundamental do clculo dos erros pode ser usado para calcular limites superiores dos
erros absoluto e relativo das operaes fundamentais.
Para alm dos erros resultantes da representao de nmeros de ponto flutuante por
computadores, tambm as operaes algbricas, que necessariamente so realizadas pelo
computador, introduzem erros no resultado destas operaes, e que tendem a acumular-se
medida que o nmero de operaes de ponto flutuante so realizadas pelo computador.
O exemplo seguinte ilustra o aparecimento deste tipo de erros. Suponha-se que se est a usar
um sistema numrico de base 10 com 5 dgitos na mantissa. Pretende-se calcular o valor da funo
f ( x) =

1 cos(x )
sen(x )
=
sen(x )
1 + cos(x )

para x = 0.007. Existem funes intrnsecas do compilador que calculam o valor das funes
trigonomtricas dentro da preciso disponvel, atravs de um processo de arredondamento. Assim,
sen(0.007) = 0.69999 102
cos (0.007) = 0.99998
A primeira expresso para f(x) fornece:
f ( x) =

1 cos(x )
10.99998
0.2 104
=
=
= 0.28572 102
2
2
sen(x )
0.69999 10
0.69999 10

enquanto que a segunda expresso fornece


f ( x) =

sen(x )
0.69999 102
=
= 0.35000 102
1 + cos(x )
1 + 0.99998

sendo que este ltimo resultado o correto, dentro da preciso de 5 dgitos disponvel. O erro
relativo entre o primeiro valor (errado) e o segundo (correto) de 22.5%. Na primeira expresso,
devido escolha feita na preciso, restou somente um dgito relevante no numerador aps a
subtrao. Isto levou a uma perda de preciso e a um resultado errneo devido ao cancelamento de
dois nmeros muito prximos entre si. Este problema seria evitado caso o sistema de representao
dispusesse de, pelo menos, mais um dgito significativo na mantissa; porm, o ponto a ser frisado
aqui que muito facilmente este tipo de erro de arredondamento ocorre, devido ao tamanho finito

- 45 -

Captulo 1. Implementao de Algoritmos


da palavra no computador. Por outro lado, caso fosse solicitado o valor de f(x) para x , seria a
segunda expresso que forneceria um valor incorreto, enquanto que a primeira forneceria um valor
correto.
Este exemplo demonstra a perda de preciso numrica devida a erros de arredondamento, onde
o nmero de dgitos significativos reduzido na subtrao de dois nmeros prximos entre si (este
efeito designa-se por cancelamento subtrativo). Isto mostra que no possvel confiar cegamente
no clculo realizado; deve-se sempre analisar cuidadosamente o algoritmo usado na procura de
possveis fontes de erros.
Desta forma, importante conhecer-se como se propagam os erros nas operaes aritmticas:
adio, subtrao, multiplicao e diviso.
7.5.3.1. Adio
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 soma de dois nmeros 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 + Y

EA 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 nmeros limitada pelo maior dos erros relativos individuais.
7.5.3.2. Subtrao.
a) Erro absoluto:
EA XY = ( 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 subtrao de dois nmeros limitada pela soma dos erros absolutos
individuais.
b) Erro relativo:
ER XY =

EA XY

X Y

EA X + EA Y

X Y

EA X

X X Y

X
Y
= ER X
+ ER Y
X Y
X Y
Fenmeno de cancelamento subtrativo:

- 46 -

EA Y

Y X Y

Captulo 1. Implementao de Algoritmos


Quando se subtraem quantidades muito prximas (diferena X Y pequena) o erro relativo pode
vir muito elevado.
7.5.3.3. Multiplicao
a) Erro absoluto:
ER XY EA X fl(Y) + EA Y fl(X )
a) Erro relativo:
ER XY ER X + ER Y
Uma estimativa para o erro relativo na multiplicao dada pela soma dos erros relativos dos
operandos (desde que estes venham afetados por um erro relativo pequeno).
7.5.3.4. Diviso.
a) Erro absoluto:
ER X /Y

EA X fl(Y ) + EA Y fl(X)
fl(y )2

a) Erro relativo:
ER X /Y ER X + ER Y
Uma estimativa para o erro relativo na diviso dada pela soma dos erros relativos dos
operandos (desde que estes venham afetados por um erro relativo pequeno).

7.6. Erros de truncatura


Alm dos erros de arredondamento que se cometem durante os clculos, outros erros, os
chamados erros de truncatura, surgem com a utilizao de certos mtodos numricos para a
resoluo do problema matemtico. Assim, a substituio de um problema contnuo por um
problema discreto ou de um processo de clculo infinito por um finito, de modo que o mtodo de
resoluo envolva apenas uma sequncia finita de operaes aritmticas, originam estes erros.
7.6.1. Clculo de valores de funes transcendentes
As funes racionais so as nicas cujos valores podem ser calculados usando apenas uma
sequncia finita das quatro operaes aritmticas bsicas. As funes transcendentes devem ser
aproximadas por funes racionais para que aproximaes para os seus valores possam ser
calculados no computador.
Por exemplo, da frmula de Taylor com resto para sen(x) tem-se:
sen(x ) = x

x3
x5 x7
x 2n1
+
+ ... + (1)n1
+ R 2n ( x),
3 ! 5! 7!
(2n1)!

onde
R 2n (x ) = (1)n

x 2n
sen(),
(2n)!

[0, x ].
- 47 -

Captulo 1. Implementao de Algoritmos


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 aproximao para sen(p/4) com cinco algarismos
significativos.
7.6.2. Discretizao
Ao usar-se o teorema do valor mdio para aproximar o integral de f(x) tem-se
b

n1

f (x ) dx = h

i=0

f (x i ) + R,

com x 0 , x 1 , ..., x n [ a, b] , x 0 = a , x i = a + i h (i=1,2, ... ,n) e h=(ba)/n,


onde, pelos teoremas do valor mdio para integrais e do valor mdio para a soma se tem
R = (h/2) (b a) f'(), [a, b].
Se R for suficientemente pequeno, ento
b

n1

f ( x) dx h

i=0

f (x i ).

Ao usar-se a expresso da direita para calcular um valor aproximado para a expresso da


esquerda est-se a substituir o problema contnuo do clculo do integral pelo problema discreto do
clculo da soma. O erro que se originou, R, o erro de truncatura.
Por exemplo, para o integral
0.1

ex

dx

ter-se-
0.1

ex

dx 0.01 [e0 + e0.01 + ... + e0.09 ] 0.0997.

Neste caso,
2

R = (0.01/ 2) (0.1 0.0) (2 e ),

[ 0,0.1] ou |R| < 10-4.

7.6.3. Mtodos iterativos


Seja { xk }

k = 0,1,...,

uma sequncia de elementos de Rn.

A sequncia diz-se definida recursivamente se


xk = f(k, xk-1, ), (k = 1, 2, ),
com x0 definido explicitamente.

- 48 -

Captulo 1. Implementao de Algoritmos


A sequncia diz-se definida por iteraes se f no depende de k. Aos valores x 0, x1, x2, ,
chamam-se iteraes.
Para um grande nmero de problemas a sua soluo pode colocar-se em termos do limite duma
sequncia definida por iteraes.
Considere-se a equao
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 sequncia definida pela iterao
xk = f(xk-1), (k = 1, 2, ...),
pode ser calculada tendo-se xk V, ento existe um nico elemento x* V tal que x* = f(x*), que se
chama ponto fixo de f. A sequncia { xk } k = 0,1,..., converge e limk xk = x*. Alm disso,

x * xk x * xk1 (velocidade de convergncia)


e

x * x k
1

k
x k x k1
1

x1 x 0

(limite para o erro em x k como aproximao

para x*).
Um processo de clculo no pode decorrer indefinidamente e apenas um nmero finito de
iteraes podem ser calculadas. Assim, tm de ser definidos critrios de paragem para os processos
iterativos. Uma deciso dever ser tomada sobre que iterao ser usada como a aproximao
pretendida.
Sendo x0, x1, x2, , xk, , uma sequncia 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* ento, dado > 0
k 0 N : k > k 0,

x * xk < .

Desta expresso pode ser deduzido um critrio de paragem: o clculo das iteraes pra com o
clculo de xk+1 se, dado > 0,

xk+1 xk <

(1)

ou, se xk+1 0

xk+1 xk < xk+1 .

(2)

Sendo discreto o sistema de numerao 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

- 49 -

Captulo 1. Implementao de Algoritmos


de arredondamento do sistema de ponto flutuante do computador e do nmero de algarismos
significativos com que se pretende a soluo.
Uma estimativa para o nmero de iteraes necessrias para que (1) possa ser satisfeita
(ignorando erros de arredondamento), obtida usando

xk+1 xk

k x 1 x 0

Donde resulta
ln
k

x 1 x 0

ln

Para evitar desperdcio de tempo de clculo no computador decorrendo de convergncia lenta


ou divergncia, ou da escolha incorreta de um valor para e em (1) ou (2), um outro critrio de
paragem deve ser usado adicionalmente. Especificando um nmero mximo de iteraes, kmax, o
processo iterativo pra no clculo de xk se,
k = kmax.
O esquema gral do mtodo iterativo o seguinte:
Algoritmo MetodoIterativo
{ Objetivos: esquema geral do mtodo iterativo
parmetros de entrada x0, e, kmax
{ aproximao inicial, erro, nmero mximo de iteraes }
parmetros de sada x1
{ soluo aproximada }
x1 x0
k0
repita
x0 x1
x1 f(x0)
kk+1
se

( x1 x 0 < x1 )

ou (k = kmax) ento

interrompa
fimse
fimrepita

- 50 -

Captulo 1. Implementao de Algoritmos

7.7. Condicionamento e estabilidade


Devido existncia dos chamados erros iniciais, os dados e parmetros do problema matemtico
que se resolve (modelo matemtico) no coincidem, em geral, com os dados e parmetros do
problema real. Assim, se a soluo exata do problema real for muito diferente da soluo exata do
problema numrico, seja qual for o mtodo usado para o resolver, os resultados obtidos no tero
interesse.
Um problema matemtico cuja soluo muito sensvel a variaes nos seus dados e parmetros
diz-se mal condicionado (ou matematicamente instvel). Um problema diz-se bem condicionado
(ou matematicamente estvel) se pequenas variaes nos dados e parmetros induzem sempre
pequenas variaes na soluo.
Por exemplo, considere-se a equao
1
1
x2 x +
= 0,
3
36
cujas razes so x1 = x2 = 1/6. A equao
x2 0.333333 x + 0.027778 = 0,
no tem razes reais. Os coeficientes da segunda equao so aproximaes dos correspondes da
primeira, com erros absolutos inferiores a 0.5E-6. Aqui, uma pequena variao nos coeficientes da
equao originou uma grande variao na soluo. Note-se que a diferena entre os dois
problemas induzida pela representao da primeira equao num sistema de ponto flutuante de
um computador.
A resoluo de um problema numrico requer, em geral, a execuo de um grande nmero de
operaes aritmticas e, originando cada uma delas um erro de arredondamento, a acumulao
destes erros pode afetar significativamente o resultado obtido.
Um mtodo numrico diz-se instvel, ou que apresenta instabilidade induzida, se a
acumulao dos erros durante o clculo pode ter grande influncia no resultado final. Um mtodo
estvel produz sempre bons resultados (com problemas bem condicionados).

7.8. Anlise de erros


No decurso da resoluo numrica de um problema matemtico num computador ocorrem erros.
Para estimar ou limitar o efeito da acumulao desses erros nos resultados obtidos dever ser feita
anlise de erros. Existem algumas tcnicas de anlise de erros, tais como a direta e a inversa, as
quais sero mencionadas de seguida.
Um algoritmo numrico define uma sequncia finita de operaes aritmticas. assim possvel,
teoricamente, usando limites para os erros, limitar ou estimar a cada passo o erro do resultado
intermdio e consequentemente o erro do resultado final. A esta forma de analisar os erros, d-se o
nome de anlise de erros direta.

- 51 -

Captulo 1. Implementao de Algoritmos


Na anlise de erros inversa o resultado calculado de um problema numrico interpretado como
o resultado exato do problema que resulta de uma alterao nos dados e parmetros do problema
real.

7.9. Concluso
A figura seguinte ilustra a ocorrncia de erros no processo de resoluo dum problema
matemtico no computador.

Os erros de modelao (iniciais) so inerentes ao problema, os erros de truncatura ao mtodo e


os erros de arredondamento ocorrem no processo de clculo de uma soluo numrica no
computador.
Em geral, a magnitude destes erros quando se originam pequena. No entanto, a maneira como
acumulam e se propagam pode, por vezes, afetar significativamente o resultado final.
Assim, a formulao do problema matemtico e a escolha do mtodo numrico so aspetos
muito importantes a considerar. O primeiro porque se um problema mal condicionado muito
sensvel a variaes nos dados e parmetros. Neste caso, os erros de modelao (iniciais) propagarse-o, a soluo do problema matemtico pode ser diferente da soluo do problema real. A
escolha de um mtodo estvel fundamental para que se possa garantir a preciso dos resultados
calculados.

- 52 -

Você também pode gostar