Você está na página 1de 55

Cálculo Numérico

Computacional

Dalcidio Moraes Claudio


Jussara Maria Marins

24 de agosto de 2005
2
Sumário

1 Introdução a Matemática Numérica 5


1.1 Natureza e Objetivos da Matemática Numérica . . . . . . . . . . . . . . . . . . . . . 5
1.2 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Algoritmos Numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Introdução à Aritmética de Máquina 13


2.1 Sistema de Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Arredondamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Digitos Significativos Exatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.5 Precisão e Exatidão de Máquinas Digital . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6 Instabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6.1 Instabilidade dos Algaritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6.2 Instabilidade de problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3 Resolução de Sistemas de Equações Lineares 41


3.1 Revisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.1 Colocação do problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.2 Definições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.3 Aritmética Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.2 Erros Computacionais no Cálculo Numérico de SELAs . . . . . . . . . . . . . 47
3.2.1 Tipos de algoritmos usados no Cálculo Numérico de SELAs . . . . . . . . . . 47
3.2.2 Tipos de erros computacionais nos algoritmos . . . . . . . . . . . . . . . . . . 48
3.3 Etapas de resolução dos SELAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.3.1 Etapa: Descomplexificação dos SELAs . . . . . . . . . . . . . . . . . . . . . . 49
3.3.2 Etapa: Os algoritmos calculadores de SELAs e suas estruturas . . . . . . . . . 51
3.4 Método de Eliminação de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.4.1 Algoritmo básico de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.4.2 Etapa: Triangularização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.4.3 Etapa: Retrossubstituição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.4.4 Instabilidade numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4.5 Algoritmo de Gauss com pivotamento . . . . . . . . . . . . . . . . . . . . . . . 60
3.4.6 Condicionamento de uma matriz . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.4.7 Refinamento da solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.4.8 Equacionamento matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.4.9 Métodos de Gauss-Jordam . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.4.10 O refinador para Gauss-Jordam . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.5 Métodos Iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.5.1 Método de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

3
4 SUMÁRIO

3.5.2 Métodos de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84


3.5.3 Os algoritmos preparados para o Gauss-Seidel/Jacobi . . . . . . . . . . . . . . 86
3.5.4 Condições de convergência do método . . . . . . . . . . . . . . . . . . . . . . . 87

4 Equações e Sistemas não Lineares 99


4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.2 Revisão sobre Polinômios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.3 Enumeração das Raı́zes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.3.1 Enumeração das raı́zes de uma equação polinomial . . . . . . . . . . . . . . . 104
4.3.2 Enumeração das raı́zes complexas de uma equação polinomial . . . . . . . . . 105
4.4 Localização das Raı́zes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.4.1 Localização das raı́zes reais de uma equação polinomial . . . . . . . . . . . . . 107
4.4.2 Localização das raı́zes complexas de uma equação polinomial . . . . . . . . . . 109
4.5 Separação das raı́zes de uma equação polinomial ou transcendente . . . . . . . . . . . 111
4.6 Ordem de Covergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
4.7 Métodos Iterativos para resolução de equações polinomiais ou transcendentes . . . . . 115
4.7.1 Métodos de quebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.7.2 Métodos de Ponto Ffixo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
4.7.3 Métodos de múltiplos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.8 Aceleração de Aitken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.9 Comparação dos métodos do ponto de vista computacional . . . . . . . . . . . . . . . 144
4.10 Resolução de sistemas de equações algébricas ou transcedentes . . . . . . . . . . . . . 146
4.10.1 Métodos de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
4.10.2 Métodos de Newton modificado . . . . . . . . . . . . . . . . . . . . . . . . . . 150
4.11 Software para resolução de equações e sistemas de equações não lineares . . . . . . . . 150
.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
.2 Formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
.3 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
.4 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
.5 arredondamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Capı́tulo 1

Introdução a Matemática Numérica

1.1 Natureza e Objetivos da Matemática Numérica


O estudo da Matemática do ponto de vista computacional constitui a
Matemática Computacional.
A Matemática Numérica insere-se no contexto da Matemática Computa-
cional, que pode ser visualizada pela figura 1.1.

Virá figura

Figura 1.1: A Matemática Computacional

Não formalizaremos aqui a descrição de cada item da figura.


Por métodos construtivos entendemos todo o método que envolve ape-
nas um sistema de operações elementares dadas a priori, utilizadas em
um número finito de vezes e que “construirão” todo o processo de cálculo
envolvido.
O sistema de operações escolhido para a Matemática Numérica é eviden-
temente o conjunto básico de operações aritméticas {+, −, ·, /}, e através
delas serão definidas as demais operações necessárias. Tal escolha é devida
à facilidade de implementação, compreenção universal e possibilidade de
expansões que formam operações mais complexas.
A Matemática Numérica tem por objetivo estudar processos numéricos
(algoritmos) para a solução de problemas, visando à máxima economia e
confiabilidade em termos dos fatores envolvidos. Como estes algoritmos
5
6 CAPÍTULO 1. INTRODUÇÃO A MATEMÁTICA NUMÉRICA

serão implementados em computadores, os fatores envolvidos podem ser:


tempo de execução, memória utilizada e erros de arredondamento.

1.2 Algoritmos

Para que possamos resolver um problema através de um computador é


necessário ter toda a sequência de passos e operações estabelecida de modo
formal para a resolução do problema ou seja um algoritmo.

• Um conceito (e não definição) de um algoritmo pode ser uma sequência


de instruções ordenadas de maneira a dar em seu decurso a solução para
um problema especı́fico.

• Tais instruções devem aparecer em um número finito e serem exe-


cutáveis mecanicamente com uma quantidade limitada de esforço.

• Um algoritmo poderá depender ou não de dados iniciais (entradas),


mas terá obrigatóriamente de produzir pelo menos um resultado final
(saı́da).

• Deve ter apenas um ponto de inı́cio e pelo menos um ponto de parada.

1.3 Algoritmos Numéricos

São os algoritmos voltados ao processamento numérico, isto é, as ope-


rações aritméticas formam o cerne do algoritmo e seu objetivo é obter um
ou mais resultados numéricos. Um algoritmo numérico de boa qualidade
tem as seguintes caracterı́sticas:
1. Inexistência do Erro Lógico ou Matemático

Exemplo 1.3.1. Procura-se uma solução x∗ da equação ax = b.


Um algoritmo ingênuo e errado, do ponto de vista matemático, seria:
1.3. ALGORITMOS NUMÉRICOS 7

Algoritmo 1.3.1.

1. Inı́cio
2. Ler a, b;
3. x = b/a;
4. Imprimir x;

O algoritmo correto é:


Algoritmo 1.3.2.

1. Inı́cio
2. Ler a, b;
3. Se a = 0 então se b = 0 então imprimir “Identidade”
4. senão imprimir “Contradição”
5. senão x = b/a;
6. imprimir x;

Os erros lógicos ocorrem quando não são verificadas as diversas possibi-


lidades entre as opções dos testes, principalmente quando são encadeados ou
mesmo quando se faz mais testes do que o necessário. No último algoritmo,
por exemplo, não é mais necessário testar se b é nulo ou não, pois não
importa este resultado e teremos a solução correta. De fato isto faz parte
da própria definição da equação e não da Lógica.
2. Inexistência do Erro Operacional
Mesmo que não haja erro lógico ou de definição, o algoritmo pode falhar
por violar restrições fı́sicas da máquina e teremos erros que são detectados
em tempo de execução. O próximo exemplo deixa isto mais claro.
Seja T o conjunto de números possı́veis de serem representados por uma
máquina e que valha:

1. ∀x ∈ T, −x ∈ T
2. t1 = inf {x | x ∈ T ∧ x > 0}
t2 = sup{x |∈ T ∧ x > 0}
8 CAPÍTULO 1. INTRODUÇÃO A MATEMÁTICA NUMÉRICA

Se temos valores y, tais que |y| < t1 (underflow) ou |y| > t2 (overflow),1
ocorrerá um erro operacional. Algumas vezes tais erros não são indicados
pelo sistemas operacional ou compilador em muitos computadores. Ocorre,
então que se obtém um resultado mas que não possui confiabilidade.
Exemplo 1.3.2. Seja z = p x + iy ∈ C, x, y ∈ R.
Procuramos |z| = mz = x2 + y 2.
Se num algoritmo implementamos diretamente a fórmula acima, con-
forme forem os valores de x ou y podemos ter overflow em x2 ou y 2,
embora valha
p
x2 + y 2 < t2
Este problema não ocorre se o algoritmo for o seguinte:
Algoritmo 1.3.3.
1. Inı́cio
2. Ler x, y
3. Se x = y = 0 então mz = 0 q
y 2

3.1 senão se |x| >= |y| então mz = |x| ∗ 1+ x
r  2
x
3.2 senão mz = |x| ∗ 1+ y
4. saı́da mz;

3. Quantidade finita de cálculos


Exemplo 1.3.3. Determinar pelo método de Newton uma raiz da equação:
p
f (x) = signl(x) · |x| = 0
onde signl(x) é a função sinal que é definida por:

1 se x > 0
sign(x) = 0 se x = 0
−1 caso contrário

Um algoritmo problemático é dado por:


1
Ver conceitos no exemplo 2.1.3.
1.3. ALGORITMOS NUMÉRICOS 9

Algoritmo 1.3.4.
1. entrada {x0, γ}
2. enquanto |f (xi)| > γ faça:
2.1 se f 0(xi) 6= 0 então xi+1 = xi − ff0(x i)
(xi )
3. saı́da {i, xi}
4. páre.
Na realidade, tal algoritmo não irá parar, além de estar incompleto, pois
para diferentes valores de x0 6= 0 e de γ o método de Newton alterna
seus valores entre x0 e x1 = −x0, embora tenhamos f 0(x) 6= 0 para cada
x ∈ (0, ∞).
Para corrigir tal problema precisamos estabelecer um número máximo
de iterações a serem executadas pelo algoritmo. Por exemplo, o comando
1 e 2 pode mudar para:

1. entrada {x0, γ, M AX}


2. enquanto |f (xi)| > γ e i < M AX faça.

Com esta função e a correção proposta não atingiremos a solução correta


embora tenhamos evitado um loop no comando 2. Outro modo de resolver
o problema é utilizar o método de Newton Intervalar que será visto no
capı́tulo 10.
4. Existência de um critério de exatidão
Na Matemática Intervalar todos os métodos apresentam tal caracterı́s-
tica, uma vez que os resultados são sempre um intervalo que contém a
solução exata e daı́ temos implicitamente o limite para o erro.
Normalmente os limites de rros são empı́ricos e pouco confiáveis.
5. Independência da Máquina
Nos algoritmos numéricos não deve haver dados dependentes da máquina.
6. Com precisão infinita, os limites de erro devem convergir
a zero
10 CAPÍTULO 1. INTRODUÇÃO A MATEMÁTICA NUMÉRICA

Exemplo 1.3.4. Dado a ∈ R, queremos determinar x = sin(a). Um


algoritmo ingênuo, que explora o fato de que sin(x) varia sempre entre −1
e +1, onde o sinal ± pode ser determinado aleatóriamente, é dado por:
Algoritmo 1.3.5.
1. Entrada:{a}
2. x = 0 ± 1;
3. Saı́da:{a, x}
Este algoritmo errado satisfaz as exigências de 1 a 5: não há erro lógico
nem operacional, o algoritmo é finito, os dados não dependem de máquina,
temos que o resultado dentro dos limites de erro; contudo para preencher
o critério 6 deve haver um critério de truncamento apropriado. Se ele é
satisfeito, temos o que se chama de “convergência numérica”. Para calcular
a função seno ou mesmo outras funções trigonométricas ou transcendentes
devemos usar a Série de Taylor que será exemplificada para a função expo-
nencial na seção de Instabilidade.

7. Eficiência
Quando se deseja encontrar a solução para um problema, sempre visamos
obter economia de recursos envolvidos.
Sobre ele formulamos condições de rapidez, alta exatidão, trabalhar com
poucos dados de referências, ocupar menor espaço de memória, ser facil-
mente representável etc.
A eficiência como caracterı́stica de um bom algoritmo é bem diferente
das caracterı́sitcas 1 e 2 que dizem respeito a eficácia. Explicando melhor,
eficácia é a qualidade de produzir um resposta de forma correta para o
problema dado, enquanto a eficiência, além de intuir a idéia anterior, exige
que o processo seja econômico nos termos citados.
Exemplo 1.3.5. Fazer contas com os dedos da mão.
• É ineficaz para cálculos não aritméticos.
• É eficaz, mas não eficiente para cálculos aritméticos não triviais.
1.3. ALGORITMOS NUMÉRICOS 11

• É eficiente para certos cálculos aritméticos triviais.

Exemplo 1.3.6. Algoritmo de Cramer para solução de sistemas de Equações


Lineares.
De forma geral, dado o sistema n × n:
     
a11 a12 a13 . . . a1n x1 y1
 a a a ... a2n    x2
  y 
 21 22 23   2 
 a31 a32 a33 . . . a3n  ·  x3  =  y3 (1.1)
     

 .. ... ... ... ... 
  ...
  ..
 .  .
 

an1 an2 . . . an3 ann xn yn
Calcula-se o determinante ∆ da matriz dos coeficientes e mais os n de-
terminantes ∆xi resultantes da substituição da coluna i da matriz dos
coeficientes pelo vetor dos termos independentes. Assim, pelo teorema de
Cramer a solução (x1, x2, ..., xn) é dada por:
∆xi
xi =

Tal algoritmo envolve no mı́nimo (n + 1)!(n − 1) operações aritméticas.
Levando em conta. o tempo para cada operação (Adições e Subtrações:
40µs e Multiplicações: 400µs), temos o seguinte quadro:
n = 5 n = 10 n = 20
Cramer (∆ pela definição) 2,5 s 3,4 dias 20 bilhões de anos
Cramer (∆ por Laplace) 0,4 s 6 min 5 meses
Gauss Método de Eliminação 36 ms 0,22 s 1,5 s
12 CAPÍTULO 1. INTRODUÇÃO A MATEMÁTICA NUMÉRICA
Capı́tulo 2

Introdução à Aritmética de Máquina

2.1 Sistema de Ponto Flutuante

• Introdução
Os números inteiros possuem representação computacional exata, den-
tro da região de representabilidade.

– Existem vários códigos mas o mais comum é o complemento de dois


– Dentro da região de representabilidade, a aritmética é exata.

• Os números reais, em geral, não tem representação exata e são aproxi-


mados.

Exemplo 2.1.1. H = 1/2


X = 2/3 − H
Y = 3/5 − H
E = (X + X + X) − H
F = (Y + Y + Y + Y + Y ) − H
G = F/E

Alguns resultados:
13
14 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

HP 48G SR 50 PC 1
H = 0.5 H = 0.5 H = 0.5
X = 0.166666666667 X = 0.1666666667 X = 0.166667
Y = 0.1 Y = 0.1 Y = 0.1
E = 0.000000000001 E = 2.0E(−13) E=0
F =0 F =0 F =0
G = EF → 0 G = EF →?! G = 0.5

A expressão ?! indica uma operação inválida.


Resultados de G em float é 0.5 e para double fica em 1.0.
Definição 2.1.1. Um número real x ∈ R é dito um número de ponto
flutuante normalizado se valerem:

1. x = mbe
2. m = ± · d1d2d3...dn, n ∈ N
3. 1 ≤ d1 ≤ b − 1, 0 ≤ di ≤ b − 1, i = 2(1)n
4. e1 ≤ e ≤ e2 sendo e1 ≤ 0, e2 ≥ 1, e1, e2 ∈ Z

onde:
b é chamado base, b ≥ 2.
e é chamado expoente, e1 é o menor e e2 é o maior expoente.
m é chamado mantissa.
n é o número máximo de dı́gitos usados na representação do número.
di, i = 1(1)n, são os dı́gitos da mantissa.
4
Definição 2.1.2. A união de todos os números de ponto flutuante com o
zero, que é representado na seguinte forma:
e1
| {z } ·b
0 = 0.000...0
n vezes

é chamado de Sistema de Ponto Flutuante F.


2.1. SISTEMA DE PONTO FLUTUANTE 15

Usualmente, procuramos representar um sistema de ponto flutuante por


F = F (b, n, e1, e2)
onde e1 e e2 são respectivamente o menor e o maior expoente, b é a base e
n é a precisão.
4
Exemplo 2.1.2. Sistema de Ponto flutuante da:
a) HP 25 : F (10, 9, −98, 100)
b) Texas SR50 : F (10, 10, −98, 100)
c) Texas SR52 : F (10, 12, −98, 100)
d) HP 48G : F (10, 12, −500, 499)
Vamos indicar por L e M, respectivamente, o menor e o maior número
positivo de F.

L = 0.1 · be1
ou ainda
L = (0. |1000{z. . . 0})b = b−1
n casas

M = 0.[b − 1][b − 1][b − 1] . . . [b − 1] · be2 = (1 − b−n)


Vejamos algumas propriedades dos números de ponto flutuante. Seja F
um sistema de um ponto flutuante da por F = F (b, n, e1, e2), então:

#F = 2 · (b − 1) · bn−1 · (e2 − e1 + 1) + 1 (2.1)


Para qualquer mantissa m vale:

b−1 ≤ |m| < 1 (2.2)


|m| < 1, pois toda mantissa tem como primeiro dı́gito (antes do ponto)
o zero.
|m| ≥ b−1, pois se |m| < b−1, não terı́amos um número normalizado,
pois o primeiro dı́gito após o ponto é não nulo.
16 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Virá figura

Figura 2.1: O Sistema F = F (2, 3, −1, 2).

(∀x ∈ F)[−x ∈ F] (2.3)


Exemplo 2.1.3. Seja F = F (2, 3, −1, 2).
Como a base é 2, os dı́gitos são 0 e 1, logo, todas as mantissas são:

0.100 0.101 0.110 0.111

e os expoentes possı́veis são -1, 0, 1 e 2.


Assim temos os seguintes números positivos:

(0.100x2−1) = (0.01)2 = 0.20 + 0.2−1 + 1.2−2 = 1/4


(0.100x20) = (0.1)2 = 0.20 + 0.2−1 = 1/2
(0.100x21) = (1.0)2 = 1.20 + 0.2−1 =1
(0.100x22) = (10.0)2 = 1.21 + 0.20 + 0.2−1 =2
(0.101x2−1) = (0.0101)2 = 0.20 + 0.2−1 + 1.2−2 + 0.2−3 + 1.2−4 = 5/16
(0.101x20) = (0.101)2 = 0.20 + 1.2−1 + 0.2−2 + 1.2−3 = 5/8

E assim, sucessivamente, teremos a seguinte tabela:

e bem 0.100 0.101 0.110 0.111


-1 1/2 1/4 5/16 3/8 7/16
0 1 1/2 5/8 3/4 7/8
1 2 1 5/4 3/2 7/4
2 4 2 5/2 3 7/2

Tais números positivos estão representados na reta real na Figura 3.2.


2.1. SISTEMA DE PONTO FLUTUANTE 17

• Os números do ponto flutuante de F não estão uniformemente dis-


tribuı́dos no intervalo [−7/2, 7/2];
• Mas 1/4, 5/16, 3/8, 7/16 estão igualmente espaçados.
• Logo, entre potências sucessivas da base existe uma quantidade cons-
tante de números de ponto flutuante, dada por:

c = bn−1.(b − 1) (2.4)
• A Região de Underflow está em torno do zero
• A região de Overflow está acima e abaixo da região de representação.
Exemplo 2.1.4. Seja F = F (3, 2, −1, 2).
1. #F = 2.(3 − 1).32−1.(2 − (−1) + 1) + 1 = 49
2. As mantissas e os números de ponto flutuante positivos estão na seguinte
tabela:

e bem 0.10 0.11 0.12 0.20 0.21 0.22


-1 1/3 1/9 4/27 5/27 2/9 7/27 8/27
0 1 1/3 4/9 5/9 2/3 7/9 8/9
1 3 1 4/3 5/3 2 7/3 8/3
2 9 3 4 5 6 7 8

3. Região de Underflow : (−1/9, 0) ∪ (0, 1/9)


Região de Overflow : (−∞, −8) ∪ (8, ∞)
Caracterı́sticas básicas das operações em F
As leis que valem para a aritmética em R não valem para F.
Exemplo 2.1.5. Seja F o mesmo sistema do exemplo 2.1.3: F =
F (2, 3, −1, 2). Tomemos em F :
5 3
x= e y=
4 8
18 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

5 3 13
x+y =
+ =
4 8 8
No entanto, 13
8 ∈/ F, pois 13 1
8 = (1.625)10 = (0.1101 · 2 )2 que possui
um dı́gito a mais na mantissa do que o permitido. Na realidade, podemos
escolher entre
3/2 = (1.5)10 = (0.110)2 ou
7/4 = (1.75)10 = (0.111)2
para um resultado aproximado.

x ⊕ y 6= x + y

x y 6= x · y
Tais fenômenos não ocorrem apenas em alguns sistemas de ponto flu-
tuante restritos, conforme os vistos nos exemplos. Consideremos F =
F (2, 5, −98, 100). Neste caso, temos:

(0.1)10 = (0.0001100110011...)2
ou arredondando em F para:

(0.1)10 = (0.11001 · 2−3)2


Somando (0.11001 · 2−3) sucessivamente dez vezes, teremos:

(0.11111)2 = (0.96875)10 6= (1.0)10


Exemplo 2.1.6. Seja F = F (2, 3, −1, 2).

Se x = 85 , y = 3
8 e z = 34 , então:

(x ⊕ y) ⊕ z = (0.101 · 20 ⊕ 0.110 · 2−1) ⊕ 0.110 · 20 =


(0.101 ⊕ 0.011) ⊕ 0.110 = 1.000 ⊕ 0.110 = 1.11
x ⊕ (y ⊕ z) = 0.101 ⊕ (0.011 ⊕ 0.110) = 0.101 ⊕ 1.001 = 0.101 ⊕ 1.00 6 1 =
0.101 ⊕ 1.00 = 1.10 6 1 = 1.10
2.2. ARREDONDAMENTOS 19

Logo:

(x ⊕ y) ⊕ z 6= x ⊕ (y ⊕ z)

Se x = 87 , y = 5
4 ez= 3
8

Também temos que:


x (y ⊕ z) = 0.111 (1.01 ⊕ 0.011)
= 0.111 1.001 = 1.0101 = 1.01
x y ⊕ x z = (0.111 1.01) ⊕ (0.111 0.011)
Logo:
= 1.00011 ⊕ 0.10101 = 1.101 = 1.10

x (y ⊕ z) 6= (x y) ⊕ (x z)

2.2 Arredondamentos

Definição 2.2.1. Seja F = F (b, n, e1, e2) um sistema de ponto flutuante.


Uma função  : R → F é considerada um arredondamento se valer:

(∀x ∈ F)[x = x] (2.5)

Como arredondar?
Tipos de arredondamentos
Os mais conhecidos são:

• Arredondamento para cima ou por excesso (4x)


• Arredondamento para baixo ou por falta (∇x)
• Arredondamento para o número de máquina mais próximo ( x)

Exemplo 2.2.1. Seja F = F (2, 3, −1, 2).


9
O número real 8 ∈
/ F, pois:
20 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

9
8= (1.125)10 = (0.1001 · 21)2 .
Podemos arredondar de duas maneiras:

9
→ (0.100 · 21) = (1.0)10
8
9 5
→ (0.101 · 21) =
8 4

No primeiro caso temos:


9
∇( ) = (0.100 · 21)
8

9
4( ) = (0.101 · 21)
8

Exemplo 2.2.2. Na base 10 podemos citar casos mais ilustrativos.

Seja F = F (10, 4, −98, 10) e sejam:

x = 0.333333

y = 0.348436

z = 0.666666...

Temos então:

∇x = 0.3333 , ∇y = 0.3484 e ∇z = 0.6666


4x = 0.3334 , 4y = 0.3485 4z = 0.6667
x = 0.3333 , y = 0.3484 z = 0.6667

se w = 0.12345, então:
2.2. ARREDONDAMENTOS 21

Virá figura

Figura 2.2: Arredondamentos

∇w = 0.1234
4w = 0.1235
w = 0.1235

Podemos representar os três tipos de arredondamento na Figura 2.2


Vamos deixar mais claros os conceitos anteriores.

Definição 2.2.2. Um arredondamento  : R → F é dito por falta, ou


por excesso se valerem, repectivamente:

(∀x ∈ R)[x ≤ x] (2.6)

(∀x ∈ R)[x ≤ x] (2.7)


Se, além disso, valer:

(∀x, y ∈ R)[x ≤ y → x ≤ y] (2.8)


que é também chamada propriedade monotônica, então definimos:
∇x = arredondamento monotônico por falta.
4x = arredondamento monotônico por excesso.

Se F = F (b, n, e1, e2) tem para a base b um número par, então o


arredondamento para o número de máquina (ou ponto flutuante) mais
próximo é notado por x e definido como:
22 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

∀x ∈ [0, be1−1), x = 0
 h 
∇x+4x
 x = ∇x, para x ∈ ∇x, 2 (2.9)


∀x ∈ [be1 , M], h i
 x = 4x, para x ∈ ∇x+4x , 4x


2

Se x < 0, x = − (−x)
A região (−be1−1, 0)∪(0, be1−1) é chamada de Região de Underflow pois
nestes intervalos não há representação adequada em F, e o erro relativo é
grande.
A região [−M, −be1 ] ∪ [be1 , M] é chamada Região de Representabili-
dade de F pois nesta região o erro relativo é limitado.
A região de (−∞, −M) cup(M, ∞) é chamada de Região de Overflow
e novamente nesta zona o erro relativo não é limitado.
Toda vez que executamos o arredondamento de um número que não
admite uma representação exata em F fazemos um erro.
Mais detalhes podem ser vistos na Norma IEEE 754 - Standart for Binary
Floating-Point Arithmetic, que foi adotado como padrão a partir da década
de 1980.

2.3 Erros

Existem vários tipos de erros e várias são as suas causas. Vamos es-
tudar três tipos de erros: os inerentes, os de discretização e os de
arredondamento.

• Erros Inerentes
Aparecem na criação ou simplificação de um modelo matemático de
determinado sistema, ou ainda nas medidas, em geral. Os valores de
medidas como tempo, temperatura, distância, intensidade luminosa
etc. são obtidos de instrumentos que têm precisão limitada.
2.3. ERROS 23

• Os erros de Discretização
Ou de Aproximação, ou Truncamento são os erros cometidos quando
se substitui qualquer processo infinito por um processo finito ou dis-
creto. Seja, por exemplo, o cálculo da constante de Euler e que é dada
por:

X 1
e=
i=0
i!

• Os erros de Arredondamento surgem quando trabalhamos com máquinas


digitais para representar os números reais.
Em geral, trabalhamos com arredondamento para o número de ponto
flutuante mais próximo ou com o arredondamento por falta.
A diferença entre o valor arredondado e o valor exato pode ser medida
pelo erro absoluto ou pelo erro relativo.
Definição 2.3.1. O erro absoluto, que é indicado por EA, é dado por:

EA = |x − x| (2.10)
4
Definição 2.3.2. O erro relativo, que é indicado por ER , é dado por:

|x − x| |x − x|
ER = ou ER = (2.11)
|x| |x|
4
Exemplo 2.3.1. Se x = 0.00006
e se x = 0.00005
EA = 0.00001
0.00001
ER = = 0.2 ou 20%
0.00005
Neste caso podemos até dizer que EA é pequeno; no entanto, não há
dúvida a respeito do ER que é da ordem de 20%.
24 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Virá figura
|x−x|
Figura 2.3: Erro Relativo = |x|
em F = F (2, 3, −1, 2)

Teorema 2.3.1. Seja F = F (b, n, e1, e2) um sistema de ponto flutuante


e  um arredondamento, então vale:
 
|x − x|
(∀x ∈ R) be1−1 ≤ |x| ≤ M → ≤µ
|x|
onde:
 1 1−n
 2b no caso de x = x
µ= (2.12)
n−1
b no caso de x = ∇x


Exemplo 2.3.2. Nas calculadoras Hewllet Packard 48G, temos:

 = e para b = 10 e n = 12

1
µ = 10−12 = 0.000 000 000 005
2

Observa-se que na região de underflow o erro é sempre igual a 1. Para


diminuir este erro é preciso que aumentemos o número de casas na mantissa.
Isto cusará maior densidade de números representáveis em F.

2.4 Digitos Significativos Exatos

• Na prática, não sabemos o valor exato.


• É impossı́vel, em geral, calcular o erro relativo ou absoluto.
2.4. DIGITOS SIGNIFICATIVOS EXATOS 25

• Precisamos, no entanto, avaliar o resultado, ou seja, saber quão exato é


o resultado. revisemos o conceito de dı́gito significante ou significativo.
Definição 2.4.1. Num sistema decimal, um dı́gito é significante se qual-
quer dos dı́gitos for 1, 2, 3, 4, 5, 6, 7, 8 ou 9. O dı́gito 0 (zero) é significante,
exceto quando for usado para fixar a vı́rgula ou ponto decimal ou preencher
o lugar de dı́gitos descartados.
4
Exemplo 2.4.1. Em 0.008735 temos quatro dı́gitos significantes ou sig-
nificativos, a saber, o 8, o 7, o 3 e o 5. Em 30.457 temos cinco dı́gitos
significantes, ou seja, todos eles. Em 23.000 temos só dois dı́gitos significa-
tivos. 2
Definição 2.4.2. Um dı́gito significativo é exato se, aredondando-se o
número aproximado para uma posição imediatamente após aquela posição
do dı́gito, isso fizer com que o erro absoluto não seja maior do que a meia
unidade naquela posição do dı́gito. Abraviaremos Dı́gito Signifcativo Exato
por Digse.
4
Exemplo 2.4.2. Os números 0.66667 e 0.666998 são aproximações para
2/3; no entanto, todos os dı́gitos significativos do primeiro são exatos, en-
quanto no segundo, só os três primeiros.
Vejamos com mais detalhes:
1. 0.66667 No primeiro dı́gito 6 ficamos com o número 0.66 e o erro ab-
soluto em relação a 2/3 é:
|0.66 − 0.666 . . . | = 0.006 66 . . . < 0.05

No segundo dı́gito 6, temos:


|0.666 − 0.666 . . . | = 0.000 666 . . . < 0.005

No terceiro dı́gito 6, temos:


2
Em Fı́sica, o zero após o ponto pode ser considerado significativo no caso de representar a precisão de uma medida.
26 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

|0.666 6 − 0.666 . . . | = 0.000 066 6 . . . < 0.000 5

No quarto dı́gito 6, temos:


|0.666 67 − 0.666 . . . | = 0.000 003 333 . . . < 0.000 05

No dı́gito 7, temos:
|0.666 670 − 0.666 . . . | = 0.000 003 333 . . . < 0.000 005

Logo todos os dı́gito significativos são exatos


2. 0.666 998 Para o primeiro dı́gito 6, temos:
|0.66 − 0.666 . . . | = 0.006 666 . . . < 0.05

No segundo dı́gito 6, temos:


|0.666 − 0.666 . . . | = 0.000 6 . . . < 0.005

No terceiro dı́gito 6, temos:


|0.6669 − 0.666 . . . | = 0.000 233 . . . < 0.000 5

Para o primeiro dı́gito 9, temos:


|0.66699 − 0.666 . . . | = 0.000 323 . . . ≮ 0.000 05

Logo o dı́gito 9 já não é exato.


Teorema 2.4.1. Se ER ≤ 21 b−m, então o número é correto em m dı́gitos
significativos exatos. A demonstração pode ser vista em [3].
Utilizando este teorema, vejamos a maneira mais prática que a definição
para calcular o número de dı́gitos significativos corretos. Tomemos o loga-
rı́tmo decimal da desigualdade: ER ≤ 12 b−m e b = 10.
 
|x−x| 1 −m |x−x|
|x| ≤ 2 10 → log |x| ≤ log 12 − m →
  (2.13)
|x−x|
m ≤ log 12 − log |x|
2.5. PRECISÃO E EXATIDÃO DE MÁQUINAS DIGITAL 27


Logo, para achar o maior número de dı́gitos significativos exatos temos:
  
1 |x − x|
m = − − log + log (2.14)
2 |x|
Se ocorrer que x = x, então podemos aplicar a fórmula anterior do
seguinte modo:
  
1 |x − x|
m = − − log + log µ + (2.15)
2 |x|
Logo, se ER ≤ 12 b−m para b = 10, podemos dizer que:
  
|x − x|
m = − 0.3 + log µ + (2.16)
|x|
onde µ é a unidade de erro de arredondamento.
Genericamente podemos calcular o número de dı́gitos significativos exa-
tos pelo logaritmo decimal do ER .
Quando não temos o valor exato para fazermos as comparações, o que
ocorre em geral, temos que: se x = limi→∞ xi, então podemos modificar a
fórmula anterior para:
  
|xi+1 − xi|
Digse(xi, xi+1) = − 0.3 + log µ + (2.17)
|xi|
O que nos dá o número de dı́gitos significativos exatos de xi+1 em relação
xi

2.5 Precisão e Exatidão de Máquinas Digital

Conforme vimos para cada máquina, calculadora ou computador há um


sistema de ponto flutuante associado. Este sistema automaticamente define
a precisão da máquina.
Definição 2.5.1. A precisão de uma máquina digital é definida como o
número de dı́gitos da mantissa dessa máquina.
28 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Virá figura

Figura 2.4: Aproximações para π

Portanto, a precisão é algo claro, não variável para uma máquina. Já a
definição seguinte não nos dá as mesmas caracterı́sticas.
4
Definição 2.5.2. Exatidão é uma medida de perfeição do resultado.
A exatidão da um resultado depende da precisão da máquina e do método
utilizado para obtenção desse resultado.
4
Exemplo 2.5.1. Vejamos várias aproximações para o número π, na figura
2.4 e a seguir o cálculo dos dı́gitos significativos exatos das aproximações,
na próxima tabela.

Aproximação xi Digse (xi, π) Aproximação xi Digse (xi, π)


3.410 3.4 3.415 4.2
3.411 3.5 3.416 5.3
3.412 3.6 3.417 4.2
3.413 3.7 3.418 3.7
3.414 3.9 3.419 3.6

Embora todas as aproximações possuam um precisão de cinco casas


decimais, somente uma delas possui os cinco dı́gitos significantes exatos,
levando em conta o valor de π = 3.14159265359 o que confere com o valor
arredondado para o número de máquina mais próximo, com 5 casas deci-
mais.
Logo, a exatidão de um processo depende, além da máquina, também
do algortimo. Para termos uma idéia da capacidade numérica de uma
2.5. PRECISÃO E EXATIDÃO DE MÁQUINAS DIGITAL 29

máquina, devemos conhecer, além da sua precisão que, em geral, é dada


em termos de dı́gitos binários, octais ou hexadecimais, conforme for a base
de funcionamento de F, qual é a sua precisão decimal. No caso de termos
F = F (16, 6, −64, 63) a precisão hexadecimal é 6, mas a precisão p10
decimal correspondete é:

166 = 10p10 → 6 log10 16 = p1 log10 10 → p1 = 6 ∗ 1.204 = 7.224 (2.18)


Daı́, a precisão decimal de F é de 7.224,e 22.4% das vezes temos 8 casas
decimais. Contudo, nem todo número que tenha uma representação exata
com sete casas ou menos será exatamente representado internamente. Por
exemplo, 0.1 não admite representação exata na base 2.
Além da precisão decimal, o cálculo do chamado Épsilon da Máquina
nos dá uma idéia da exatidão da máquina.
O ε da máquina é o número de ponto flutuante, tal que:

1+ε>1
Alguns métodos para o cálculo de ε não dão seu valor exato, mas isto
nem sempre é necessário, pois o que importa é a sua oredem de grandeza.
O programa Pascal seguinte calcula uma aproximação de ε da máquina:
PROGRAM EPSMAQ (OUT PUT);
VAR EPSILON, EPS : REAL;
BEGIN
EPS: = 1;
REPEAT EPSILON: = EPS;
EPS: = 0.5 * EPS
UNTIL EPS + 1 = 1;
WRITELN(’EPSILON DA MÁQUINA = ’:30, EPSILON : 30);
END.
O resultado é ε ∼
= 0.7105427357601 · 10−14

Exemplo 2.5.2. seja o número irracional 2 = 1.414213562...
30 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

1. 1.4142 é mais preciso e mais exato que


√1.41, pois o primeiro tem maior
número de casas e aproxima melhor 2.
2. 1.4149 é mais preciso que 1.414, pois tem mais casas decimais, porém
é menos exato do que 1.414, pois o dı́gito 9 do primeiro não é exato.

2.6 Instabilidade

Veremos agora uma série de problemas cujos diferentes modos de solução


podem acarretar diferentes resultados. É claro que para muitos problemas
não importa qual a solução utilizada que teremos sempre o mesmo e bom
resultado. Quando não temos um bom resultado, os erros podem ser cau-
sados pelos modelos ou entrada de dados (inerentes), pelo truncamento e
pelo arredondamento conforme já citamos anteriormente. Não trataremos
aqui dos erros inerentes. Na realidade, podemos ver os problemas do ponto
de vista da instabilidade. Esta instabilidade pode ser entendida como uma
“sensibilidade a perturbações” e pode ocorrer tanto no problema em si como
no algoritmo, isto é, na maneira de resolvê-lo.

2.6.1 Instabilidade dos Algaritmos

Comecemos com dois exemplos que são citados em [2].


Exemplo 2.6.1. Calcular e e e−5.5 pela expansão na série de Taylor.
Dado que:
x x2 x3 x4
e =1+x+ + + + ...
2 3! 4!
Então para x = 1 temos:

e∼
= 1 + 1 + 0.5 + 0.16667 + 4.1667E − 2 + 8.3333E − 3+
+1.3889E − 3 + 19841E − 4 + 2.4801E − 5+ (2.19)
+2.7557E − 6 = 2.7183
Comparando a soma anterior com a valor 2.718281828, temos um erro
relativo de 6.6E − 6, que é bem pequeno.
2.6. INSTABILIDADE 31

Para x = −5.5 temos:

e−5.5 ∼
= 1 − 5.5 + 15.125 − 27.730 − 27.730 + 38.129−
41.942 + 38.446 − 30.208 + 20.768 − 12.692+ (2.20)
6.9803 − 3.4902 + 1.5997 − . . . = 0.0026363
Comparando agora com e−5.5 dado por uma calculadora, temos que:
e5.5 = 0.004 086 771 439
E o erro relativo é de 0.35 que é bem maior que o erro anterior.
Qual a causa da diferença?
Observando os termos da soma do segundo caso, vemos que há uma
combinação de dois fatores:
• somas de grandezas de diferentes ordens;
• subtração e grandezas quase iguais.
Este fenômeno é chamado de cancelamento subtrativo ou con-
celamento catastrófico, que é bastante comum em cálculos. se não
houvéssemos arredondado cada parcela, o erro seria sensivelmente menor.
• Temos só esta causa?
O cancelamento subtrativo não é a real causa do erro final da soma;
• Como melhorar?
Se mudamos o cálculo de e−5.5 para 1/e−5.5 e utilizarmos as mesmas
parcelas, teremos 0.0040865 e o erro relativo é 6.6E − 5.
• Logo, podemos utilizar a série de taylor para argumentos positivos.
R1
Exemplo 2.6.2. Calcular In = 0 xnex−1dx para n = 1, 2 . . .
Solução: integrando por partes:
Z 1 Z 1
n x−1 n x−1 1
n xn−1ex−1dx = 1−nIn−1, n = 2, 3, . . .
 
x e dx
|{z} | {z } = x e 0

0 u dv 0
(2.21)
32 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Ou seja: Z 1
In = xnex−1dx = 1 − n In−1
0
onde:
Z 1
1
I1 = xex−1dx =
0 e
Usando F = F (10, 6, −98, 99), temos os seguintes valores:

I1 ∼
0.367879 I6 ∼
= = 0.127120
I2 ∼
0.264242 I7 ∼
= = 0.110160
I3 ∼
0.207274 I8 ∼
= = 0.118720
I4 ∼
0.170904 I9 ∼
= = -0.068480
I5 ∼
0.145480
=
R 9 x−1
Olhando o integrando I9 = x e , verificamos que é sempre positivo
em [0, 1] e, no entanto, o valor computado foi Negativo.
O que causou tal erro?
Notemos que só foi feito um erro de arredondamento em I1 quando 1/e foi
tomado por 0.367879 em vez de 0.3678794412. Como a fórmula está correta,
o erro final é devido apenas a este erro feito em I1. Observemos como tal
ocorreu: em I2 o erro foi multiplicado por −2, depois em I3 foi multiplicado
por −3,1 etc. Então, o erro de I9 é exatamente (−2)(−3) . . . (−9) = 9!
Sendo:

E1 = [1/e − 0.367879] = 4.412 · 10−7 (2.22)


Temos no final:
4.412 · 10−7 · 9! ∼
= 0.1601
Na realidade, o valor correto de I9 é:

I9 = −0.06848 + 0.1601 = 0.00916


que é uma valor razoável para I9. Logo, embora a fórmula 2.21 esteja
correta, ela é sensı́vel em relação ao acúmulo de erro, ou seja, o algoritmo
2.6. INSTABILIDADE 33

gerado é de má exatidão. Um algoritmo estável é dado pela fórmula equiv-


alente:
1 − 1n
In−1 = n = . . . , 4, 3, 2 (2.23)
n
Nesta fórmula, a cada passo, o valor do erro em In é decrescido por n1 ,
(em vez de multiplicado por n). Se nós começamos por n  1, voltaremos
e então o erro inicial ou erros de arredondamento diminuirão a cada passo.
Resta-nos saber qual será o valor final para In. Observemos que:
1 n+1 1
Z Z  
x 1
In = xnex−1dx ≤ xndx = = (2.24)
o n + 1 0 n + 1
Portanto, In tende a zero quando n tende ao infinito. se aproximadamamos
I20 para zero e o usamos como valor inicial, temos:
I20 ∼
= 0 I14 ∼
= 0.0627322
I19 ∼
= 0.0500000 I13 ∼
= 0.0669477
I18 ∼
= 0.0500000 I12 ∼
= 0.0717733
I17 ∼
= 0.0527778 I11 ∼
= 0.0773523
I16 ∼
= 0.0557190 I10 ∼
= 0.0838771
I15 ∼
= 0.0590176 I9 ∼= 0.0916123
1
Majorando o erro em I20 por 21 , temos:
1 1 ∼
para E19 = · = 0.0024
20 21
1 1 1
·
para E18 = ·
19 20 21
Em E15 temos 4 · 10−8, o que mostra que o erro inicial está praticamente
diluı́do. Continuando o algoritmo dado por 2.23, temos:
I8 = 0.1009320 I4 = 0.1708934
I7 = 0.1123835 I3 = 0.2072767
I6 = 0.1268024 I2 = 0.2642411
I5 = 0.1455329 I1 = 0.3678795
34 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Exemplo 2.6.3. Calcular a média aritmética de dois números a e b.


Algoritmo 1:

1. entrada {a, b}
2. s ← a + b
3. m ← s/2
4. saı́da {m}

Algoritmo 2:

1. entrada {a, b}
2. s1 ← a/2
3. s2 ← b/2
4. m ← s1 + s2
5. saı́da {m}

Algoritmo 3:

1. entrada {a, b}
2. d1 ← a − b
3. d1 ← d1/2
4. m ← b + d1
5. saı́da {m}

Para um dado F = F (b, n, e1, e2) podemos ter, conforme a, b ∈ F os


seguintes problemas:

• Algoritmo 1: overflow em 2.
• underflow em 2 e 3.
2.6. INSTABILIDADE 35

No algoritmo 3 não teremos provavelmente nenhum erro operacional, mas


poderemos ter um erro no comando 2 se houver cancelamento subtrativo.
Vejamos agora um algoritmo clássico para calcular as raı́zes de equação
do 2o grau cujas as fórmulas são dadas pelas equações seguintes:


b2 − 4ac
−b +
x1 = (2.25)
√2a
−b − b2 − 4ac
x2 = (2.26)
2a
Vamos analisar alguns cassos a serem resolvidos em F = F (10, 8, −50, 50)

Exemplo 2.6.4. Caso a:

a = 1 , b = −105 , c = 1

As raı́zes exatas corretamente arredondadas para 11 dı́gitos são:

x1 = 99999.999990

x2 = 0.000010000000001
Se as raı́zes forem calculadas por (22), teremos:

x1 = 100000.0 (muito boa)

x2 = 0 (ruin)
Na realidade, no cálculo de x2 fomo vı́timas do chamado “cancelamento
catastrófico”. Façamos um parêntese para explicar tal fenômeno.
Considerando x = 12345678.0 e y = 12345677.0, temos uma diferença
x − y = 1.00000000, porém, com uma pequena mudança de x para x̄ =
12345678.1 e de y para ȳ = 12345676.9, obtemos uma diferença de:

z̃ = 1.20000000
36 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Portanto, uma mudança no nono dı́gito de um dado causou uma mu-


dança no segundo dı́gito da resposta. Neste caso, quando estamos sub-
traindo grandezas aproximadamente iguais e há um erro muito grande,
dizemos que houve um cancelamento subtrativo (o mesmo vale para somar
grandezas iguais, mas de sinais diferentes).
Voltando para o exemplo inicial, para calcular x2 por 2.25 ocorre:

5
+10 − 1010 0
x2 = = =0 (2.27)
2 2
Que é identificado cancelamento subtrativo.
Uma forma de evitar tal problema, é usar o seguinte algoritmo:

−b − sign(b) b2 − 4ac
x1 = (2.28)
2a
Como ax2 +bx+c = a(x−x1)(x−x2) implica que ax1 x2 = c, podemos
calcular a raiz por:
c
x2 = (2.29)
ax1
Aplicando este algoritmo, não tão ingênuo como 2.25, temos:

• x1 = 10000.00
• x2 = 1.0000000/100000.00 = 0.000010000000

Caso b:
a = 6 , b = 5 , c = −4
Aqui não há dificuldades em calcular para x1 e x2 os valores:

• x1 = 0.50000000
• x2 = −1.3333333

Seja qual for a fórmula utilizada.


Caso c:
2.6. INSTABILIDADE 37

a = 6x1030 , b = 5x1030 , c = −4x1030


Desde que os coeficientes foram multiplicados por 1030 não há mudança
nas raı́zes. Contudo, a aplicação das fórmulas pode levar a um problema
de overflow, desde b2 > 1050 (considerando o F dado).
Caso d:
a = 10−30 , b = −1030 , c = 1030
Aqui, x1 está muito perto de 1, enquanto x2 está perto de 106. Portanto,
nosso algoritmo deve determinar x1 muito aproximadamente, mas irá falhar
para x2.
Caso e:
a = 1.0000000 , b = −4.0000000 , c = 3.9999999
As raı́zes verdadeiras são:

• x1 = 1.999683772
• x2 = 2.000316228

Mas aplicando a fórmula 2.28, obtemos x1 = x2 = 2.0000000, com


quatro dı́gitos corretos.
Exemplo 2.6.5. Seja o sistema:

0.117 · 10−2 x + 0.648



y = 0.649
(2.30)
0.512 x − 0.920 · 10−3 y = 0.511
Que, resolvidos em F = F (10, 3, −3, 3) com arredondamento para o
número de máquina mais próximo, temos:

0.117 · 10−2 x + 0.648



y = 0.649
(2.31)
0x + 0.284 · 103 y = 0.511
E daı́ y = 0.996 e x = 3.42.
38 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Trocando a ordem das equações e resolvendo no mesmo sistema de ponto


flutuante, temos x = 1 e y = 1, a qual se acha bem mais próxima da solução
exata que é:

x = 0.999843279 . . . e y = 0.999737937 . . .

Voltaremos a apresentar este exemplo no Capı́tulo 3 quando veremos o


Método de Eliminação de gauss com Pivotamento Parcial.
Com os exemplos anteriores vemos que os algoritmos podem gerar, sob
certos dados, erros consideráveis de modo a tornar inútil o resulstado.
Vejamos agora outro tipo de instabilidade.

2.6.2 Instabilidade de problemas

Consideremos a tarefa de colocar um lápis comum, de base plana, em pé.


Se a base for colocada para baixo, a terefa será fácil; contudo, se a parte
cônica da ponta ficar para baixo, a tarefa é quase impossı́vel (sem truques).
A primeira tarefa constitui um problema estável, enquanto a segunda é dita
instável, pois, efetivamente, se o lápis ficar em pé, será apenas por algumas
frações de segundo e depois cairá. Algo semelhante ocorre com problemas
numéricos.
Veremos agora um problema clássico em metemática Numérica que é
citado em |26| Wilkinson.

Exemplo 2.6.6.

p(x) = x20 − 210x19 + . . . = (x − 1)(x − 2)(x − 3) . . . (x − 19)(x − 20) = 0

É claro que as raı́zes são 1, 2, 3, . . . , 19 e 20 e estão bem separadas.


Computando as raı́zes de p(x) + 2−23 · 210x19 = 0, num computador com
sistema de ponto flutuante F = F (2, 90, e1, e2), teremos:
2.6. INSTABILIDADE 39

R1 = 1.000 000 000


R2 = 2.000 000 000
R3 = 3.000 000 000
R4 = 4.000 000 000
R5 = 4.999 999 928
R6 = 6.000 006 944
R7 = 6.999 697 234
R8 = 8.007 267 603
R9 = 8.917 250 249
R10, R11 = 10.095 266 145 ± 0.643 500 904i
R12, R13 = 11.793 633 881 ± 1.652 329 728i
R14, R15 = 13.992 358 137 ± 2.518 830 070i
R16, R17 = 16.730 737 466 ± 2.812 624 894i
R18, R19 = 19.502 439 400 ± 1.940 330 347i
R20 = 20.846 908 101

Notemos que um termo da equação mudou de −21019 para −210 +


2−23x19, ou seja, uma mudança no trigésimo dı́gito da base 2 em apenas
um dos coeficientes. O resultado é completamente inesperado e as mu-
danças nas raı́zes são grandes. A razão dessa mudança drástica não é
arredondamento nem o algoritmo e sem problema de condicionamento.
Há certos problemas que, quando sofrem pequena alteração nos dados
de entrada, têm na sua resposta pequena diferença proporcional, enquanto
outros mostram grande variação no resultado do mesmo com uma pequenı́s-
sima alteração nos dados de entrada. Os primeiros problemas são ditos bem
condicionados e os segundos são ditos mal condicionados.

No caso de polinômio podemos analisar o seguinte:

Seja p(x, α) = x20 − αx19 + . . .

Deferanciando p(x, α) = 0 em relação a α, temos:


∂p(x, α) ∂x ∂p(x, α)
+ =0
∂x ∂α ∂α
40 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

∂x ∂p/∂α
=−
∂α ∂p∂α

∂x x19
= P20 Q20
∂α i=1 j=1, j6=i (x − j)

Calculando em cada raiz, temos:



∂x i19
x=i = Q20 , i = 1, 2, . . . , 20. (2.32)
∂α j=1, j6=i (i − j)

Vejamos a seguinte tabela:


∂x ∂x
Raiz ∂α |x = i Raiz ∂α |x = i
1 −8.2x10−18 11 −4.6x107
2 8.2x10−11 12 2.0x108
3 −1.6x10−6 13 −6.1x108
4 2.2x10−3 14 1.3x109
5 6.1x10−1 15 −2.1x109
6 5.8x101 16 2.4x109
7 −2.5x103 17 −1.9x109
8 6.0x104 18 1.0x109
9 −8.3x105 19 −3.1x108
10 7.6x106 20 4.3x107

Estes números dão uma medida direta da sensibilidade ou condiciona-


mentodas raı́zes para o coeficiente α. Logo, as raı́zes maiores são as mais
sensı́veis. Na unidade quatro voltaremos a falar do condicionamento das
raı́zes de equações não lineares.
Exemplo 2.6.7. Dada uma curva y = f (x), determinar a tangente a
essa curva em x = x0, assim como a área limitada por esta curva e as retas
x = a, x = b, e y = 0.
2.6. INSTABILIDADE 41

Virá figura

Figura 2.5: Estabiladade da integração e instabildade da diferenciação

Se pequenas variações ocorrerem em f (x) em virtude, por exemplo, de


arredondamento ou truncamento, podemos ter grandes variações no cálculo
da tangente à curva no ponto (x0, f (x0)), como pode ser visto na Figura
2.5, onde a curva g constitui uma perturbação na curva f .

No entanto, a área sob a curva f ou g mantém-se praticamente a mesma.

Exemplo 2.6.8. Consideremos a equação diferencial:

y 0(x) = y 0 ≤ x ≤ 1.0
(2.33)
y(0) = 1

Aproximando y 0()x por:

(h/2)[−3y(x) + 4y(x + h) − y(x + 2h)]

Obtido pela aproximação de y(x) por um polinômio do 2ograu e asso-


ciando y(x) com yi, y(x + y) com y(x + 2y) com yi+2, temos:

yi+2 = 4yi+1 − 3yi − 2hyi i = 0, 1, 2, . . .

Onde y0 = 1 e y1 = eh.
Se tomarmos h = 0.1, teremos:
42 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

y2 = 1.220 683 672


y3 = 1.346 187 75
y4 = 1.478 563 25
y5 = 1.606 452 2
y6 = 1.694 406 4
y7 = 1.636 978 56
y8 = 1.225 813 76
y9 = -0.735 076 352
y10 = -6.542 909 44

E daı́ deverı́amos ter em uma aproximação para y(1) = e. Contudo, y10


nada tem a ver com y(1).
Os dois últimos exemplos mostram que a diferenciação pode ser um
problema numéricamente mais instável do que a integração. Contudo, do
ponto de vista analı́tico o processo da diferenciação de funções que surgem
na prática é mais simples do que a integração.
Com isso, concluimos esta unidade mostrando alguns problemas que a
Matemática Numérica lida em função da aritmética feita numa máquina
como um computador digital. Felizmente, os problemas causados pelo
arredondamento ou pelo condicionamento dos problemas não são maiores
que as vantagens do uso do computador. Estes exemplos devem levar-nos
a pensar que não devemos em qualquer hipótese confiar cegamente nos
resultados produzidos pela máquina.
.1. INTRODUÇÃO 157

Tópicos sobre a Norma IEEE 754

.1 Introdução

Históricamente existem alguns marcos na representação dos números tanto


dos naturais ou inteiros como dos racionais como reais. Na notação decimal
o uso do zero e o sistema posicional foi um deles. Isto facilitou não só a
representação em si, como também os algoritmos de operações aritméticas
tornaram-se mais simples. Neste sistema a representação de números de
forma finita ou de frações periódicas ou não, está bem estabelecido e usado
de modo mundial.
Com o advento dos computadores e sua memória com palavras de tamanho
finito tornaram-se necessários criar novas representações. Os números in-
teiros são representados com sistemas de ponto fixo. Para estes, usualmente
temos a representação usando o código de complemento de dois, para re-
presentar adequadamente o zero, os positivos e negativos. Para os números
racionais são usados os sistemas de ponto flutuante. Os números reais, são
aproximados por racionais. De fato em qualquer sistema de ponto flutuante
só temos representações para racionais. Isto traz vários problemas com os
arredondamentos.
Até a década de 80 cada fabricante de computador escolhia um sistema de
representação e o implementava e todos os demais aplicativos de software
que usariam estas máquinas usavam necessariamente este sistema. Por
exemplo, no software básico de mainframes com IBM usava-se um tipo de
representação, com base interna de 16, onde o número de ponto flutuante
era representado com mantisa, sinal da mantissa e caracterı́stica que re-
presentava o exponte sem sinal, fazendo um deslocamento. Já nos antigos
computadores Burroughs ou CDC, usava-se base 8 e o número de ponto
flutuante possui, sinal da mantissa, mantissa, expoente e sinal do expoente.
Com a difusão de computadores de pequeno porte onde a flexibilidade
de aplicativos tornou-se maior, foi necessário desenvolver um padrão para
viabilizar o uso, reuso e intercâmbio de informações sobre a aritmética de
158 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

ponto flutuante de modo mais uniforme. Estes problemas foram estudados


por um comite do Instituto de Engenharia Elétrica e Eletrônica do Estados
Unidos da América do Norte. 3
O objetivo da Norma IEEE 754 é estabelecer as diretivas para a imple-
mentação da aritmética binária de ponto flutuante. Ela especifica formatos,
operações básicas: adição subtração, multiplicação, divisão, raiz quadrada,
comparações, conversões, e quais são as situações de excessão. A norma
IEEE 854-1987 generaliza a 754 e abrange a aritmética de ponto flutuante
na base decimal, que é usada principalmente nas calculadoras.
Embora a Norma propicie suporte para para diagnosticar certas situações
de risco, isto nem sempre é implementado pelo fabricante em sua totalidade.
O link da IEEE onde pode-se comprar a norma é www.ieee.org.
ou http://standards.ieee.org/
O link para mais informações e onde existem artigos como o do David
Goldberg e outros é http://grouper.ieee.org/groups/754/
Um link muito interessante, criada por Quanfei Wen é:
http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html

.2 Formatos

Toda a máquina ou qualquer instrumento material tem implicitamente uma


limitação fı́sica. Por exemplo, uma fita métrica comum não serve para medir
corretamente com milı́metros e sim apenas com centı́metros; se usarmos um
paquı́metro, podemos medir corretamente com milı́metros. Uma máquina
como um carro tem um limite máximo de velocidade. Para atingir veloci-
dades maiores temos que usar outro tipo de carro ou até mesmo outro tipo
de veı́culo, como um avião. Estas limitações estão associadas à precisão.
No caso de cálculos feitos em máquinas digitais temos a chamada precisão
simples, dupla ou precisão extendida que dependem de vários parâmetros
estabelecidos pelo hardware, como tamanho em bits da palavra de memória,
3
Institute of Electrical and Electronics Engineers: IEEE ou ”EYE triple E.”O IEEE é uma sociedade cujos membros
são técnicos profissionais da área de engenharia eletrônica, elétrica e atualmente de computação e outras tecnologias
emergentes.
.2. FORMATOS 159

tamanho de registradores especiais, número de bits extras da palavra de


memória, como os “tags” bits ou “flags” que indicam a paridade, qual o tipo
de conteúdo, underflow, overflow, divisão por zero, operação inválida ou
outros indicadores para o sistema operacional.
Na Norma são assumidos as seguintes definições:

• Número de Ponto Flutuante Binário


É uma seqüência de dı́gitos binários armazenados em bits, composto
de 3 campos, O bit mais significativo é o sinal da mantissa, 0 para
positivo e 1 para negativo; um expoente deslocado (biased em inglês)
e uma mantissa que contém a parte fracionária.

• Número Normalizado
É o número de ponto flutuante cujo expoente esta dentro dos limites e
a mantissa representa qualquer fração binária.

• Expoente
É o mesmo expoente da definição usual de número de ponto flutuante,
ou seja, é o expoente da base 2 não deslocado, ou seja, “not-biased”.

• Expoente “biased” ou Caracterı́stica


É a soma de uma constante“bias”com o expoente gerando um expoente
deslocado, para evitar que tenhamos que armazenar um sinal para
o expoente, o que dificulta os algoritmos aritméticos. Nas máquinas
IBM era chamado de Caracterı́stica para não confundir com o expoente
normal.

• Número Desnormalizado
É um número não nulo cujo expoente tem um valor reservado, usual-
mente o valor mı́nimo e cujo primeiro bit da mantissa é 0. É útil para
representar os números que ficam na região de underflow.

• Mantissa ou Fração
160 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

É uma seqüência de bits que representa a mantissa da definição usual


e que de fato possui como primeiro bit o valor 1 que se torna implı́cito,
antes do ponto separador que também é implı́cito.

• Infinitos e Zeros

Com as possibilidades de bits temos duas configurações para o zero:


+0 e −0, o que é comum em certos códigos, e dois infinitos: +∞, −∞.

• NaN: Não é um número de ponto flutuante

É uma seqüência de bits que possui valores indefinidos e representam


operações inválidas.

Para cada formato temos a seguinte expressão:

(−1)S 2e(b0.b1b2b3 . . . bn−1)

onde S=0 se a mantissa for positiva ou S=1, se for negativa, Emin ≤ e ≤


Emax, o valor b0 tem o valor 1, na base binária e assume-se que este ‘10
e´constante e fica subentendido e não ocupa um espaço ou bit; os demais
dı́gitos binários são nulos ou 1.
No formato simples temos 32 bits dispostos na seguinte fôrma:

Quantidade de bits 1 8 23
Conteúdo Sinal Expoente fração
Bits 31 30, 29, . . . 23 22,21 . . . 1, 0

Com esta configuração temos as seguintes possibilidades:


.3. EXEMPLOS 161

Classe Sinal Exp Fração


Zeros 1 0 0
0 0 0
Número Normalizado 0 1-254 qualquer
1 1-254 qualquer
Número Desnormalizado 0 0 não nulo
1 0 não nulo
Infinitos 0 255 0
1 255 0
NaN( Not a Number) 255 não nulo
No formato duplo temos 64 bits dispostos na seguinte fôrma:
Quantidade de bits 1 11 52
Conteúdo Sinal Expoente fração
Bits 63 62, 61, . . . 50 51,50 . . . 1, 0

Para outros formatos temos o seguinte resumo:


Parâmetro Formato
Básico Básico Duplo Duplo
“single” Estendido “double” Estendido
n (precisão) 24 ≥ 32 53 ≥ 64
Emax +127 ≥ 1023 +1023 ≥ 16383
Emin -126 −1022 ≤ −16382
Bias +127 Não +1023 Não
especificado especificado
Bits do expoente 8 ≥ 11 11 ≥ 15
Total em bits 32 ≥ 43 64 ≥ 79

.3 Exemplos

Estes exemplos se referem ao formato simples, que correspondem ao tipo


float na linguagem C ou Real em Pascal nos atuais PC com palavra
162 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

básica de 32 bits ou 4 bytes. Na linguagem C, através das bibliotecas de


I/O a especificação de formato % converte o conteúdo apontado para a
saı́da desejada.
especificador o argumento é
convertido para a
d ou i int notação decimal de
inteiro com sinal
o int valor octal sem sinal
sem os zeros finais
x ou X int notação hexadecimal, sem os
zeros não significativos
u int notação decimal sem sinal
e ou E float or notação decimal cientı́fica
double com [−]m.mmm . . . mE[±]nnn
f float or notação decimal
double com [−]mmmm.nn . . . n
g ou G float or usa a forma mais curta dentre e ou f
double e sem os zeros não significativos
u int notação hexadecimal, sem sinal
p pointer endereço armazenado num ponteiro
O formato %p.qf indica que serão usadas p espaços para o número, con-
tando o sinal e o ponto, e q indica o número de casas decimais após o
ponto.
Observações:
Muito cuidado é necessário ao usar os formatos adequados ao tipo de
variável.
1. No caso de inteiros a linguagem C, como normalmente é implementada
não avisa sobre o overflow ou underflow.
2. A divisão por zero não causa uma interrupção em si, embora quando
o valor é impresso temos: (1/0) = 1.#IN F 00. e seu conteúdo fica:
7f 800000x = (0|111 1111 1|00000 . . . 0)2 que sinaliza +∞. Se este
.4. EXEMPLOS 163

valor for reusado o processo de inderterminação continua.


3. Se por exemplo, o valor (1.0/0.0) é somado a 10.0 temos: (1/0 ∗ 1 +
10)f = 1.40445e + 306
4. No caso de float ....

.4 Exemplos

Exemplo .4.1. Indicar a configuração de bits que assumem os seguintes


valores:
1. float num=357.8125;
(a) Convertendo para binário:

(357.8125)10 = (1 0110 0101.1101)2


(b) Deslocar o ponto fracionário:

(357.8125)10 = (1.0110 0101 1101)2 · 2+8


(c) Completar a mantissa até completar os 23 bits ou preencher com
zeros o que faltar

m = 011 0010 1110 1000 0000 0000


Lembrar que o primeiro 1 fica subentendido e foi cortado, e começamos
a preecher do bit mais significativo, da esquerda para direita.
(d) Deslocando o expoente: Somar a constante do “bias=127´´

127 + 8 = 135 = (1000 0111)2


(e) Preencher o expoente com o resultado do item anterior.
Se não houver 8 bits preencher com zeros.
(f) Determinar o sinal da mantissa.

S=0
164 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

(g) Juntando as partes:

(357.8125)10 = 0|100 0011 1|011 0010 1110 1000 0000 0000

ou ainda em hexa:

(357.8125)10 = 43b2e800x

Se o número fosse negativo, ficarı́amos com:

(357.8125)10 = c3b2e800x

Atenção, isto não é converter o número para a base 16.

Exemplo .4.2. Seja agora o caso de números inteiros: int i=-357; int
j=357;
Usa-se o complemeto de 2.

1. Convertendo para binário e completando com zeros:

357 = (1 0110 0101)2


357 = (0 . . . 0 0001 0110 0101)2
2. Fazendo o complemento de 2:

1 . . . 1 0 1001 1010
+ 1
1 . . . 1 1110 1001 1011

3. para o valor positivo, não é necessário nenhuma outra conta, além da


conversão inicial.
Logo:

(357)10 = 00000165x
(−357)10 = f f f f f e9bx
.4. EXEMPLOS 165

Exemplo .4.3. Outro número real f loat num = −951.339 843 75;
1. Convertendo para binário:

(−951.33984375)10 = (11 1011 0111.0101 0111)2

2. Deslocar o ponto fracionário:

(−951.33984375)10 = (1.11011011101010111)2) · 29

3. Completar a mantissa até completar os 23 bits ou preencher com zeros


o que faltar

m = 1.11011011101010111000000

4. Deslocando o expoente: Somar a constante do “bias=127´´

127 + 9 = 136 = (1000 1000)2

5. Preencher o expoente com o resultado do item anterior.


Se não houver 8 bits preencher com zeros.
6. Determinar o sinal da mantissa.

S=1

7. Juntando as partes:

(−951.33984375)10 = 1|100 0100 0|110 1101 1101 0101 1100 0000

ou ainda em hexa:

(−951.33984375)10 = c46dd5c0x

Se o número fosse positivo, ficarı́amos com:

(951.33984375)10 = 446dd5c0x
166 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA

Exemplo .4.4. Consideremos um número real com precisão dupla:


1. double x=245.;
2. Convertendo para binário:

(245.)10 = (1111 0101)2

3. Deslocar o ponto fracionário:

(245.)10 = (1.111 0101)2 · 2+7

4. Completar a mantissa até completar os 52 bits ou preencher com zeros


o que faltar

m = 111 0101 0000 000 . . . 0000

Lembrar que o primeiro 1 fica subentendido e foi cortado, como na


precisão simples e começamos a preecher do bit mais significativo, da
esquerda para direita.
5. Deslocando o expoente: Somar a constante do “bias=1023 = 210 − 1´´

1023 + 7 = 1030 = (100 0000 0110)2

6. Preencher o expoente com o resultado do item anterior.


7. Determinar o sinal da mantissa.

S=0

8. Juntando as partes:

(245.)10 = 0|100 0000 0110 1110 1010 0000 . . . 0000

ou ainda em hexa:

(245)10 = 406ea000 00000000x


.5. ARREDONDAMENTOS 167

.5 arredondamentos

O arredondamento é um ponto crı́tico da aritmética de ponto flutuante.


Para fazer o arredondamento de modo correto é necessário evitemente con-
hecer os demais dı́gitos do resultado. De fato nas unidades de aritmética
existem mais informações do que é mostrado na palavra de memória. É a
aprtir destas informações que é calculado o arredondamento.
Existem 4 tipos de arredondamento definidos na norma.

• “Unbiased:” arredonda para o mais próximo


• Direcionado ao Zero
• Direcionado ao infinito positivo
• Direcionado ao infinito negativo

Será continuado.
Revisão de Cálculo
O seguintes resultados são vistos nos cursos básicos e as referências estão
na Bibliografia.
168 CAPÍTULO 2. INTRODUÇÃO À ARITMÉTICA DE MÁQUINA
Referências Bibliográficas

[1] Lamport, L., LaTeX : A Documentation Preparation System User’s


Guide and Reference Manual, Addison-Wesley Pub Co., 2nd edition,
August 1994.
[2] Forsythe, G.E.;Malcom, M.A. & Moler C.B. Computer Methods for

mathematical computations Englewood Clifs, Prentice Hall, 1977.
[3] Pennington, R.H. Introductory computer methods and numerical
analysis. New York, MacMilan, 1965.

169

Você também pode gostar