Notas de Cálculo Numérico

Propaganda
Notas de Cálculo Numérico
Túlio Carvalho
6 de novembro de 2002
2
Cálculo Numérico
Capítulo 1
Elementos sobre erros numéricos
Neste primeiro capítulo, vamos falar de uma limitação importante do cálculo numérico. Veremos
que qualquer informação quantitativa, e portanto representada por números, tem uma precisão
limitada. Esta preocupação com os erros numéricos não deve entretanto ser exagerada a ponto
de duvidarmos da resposta que uma tarefa realizada no computador pode dar. No m, saberemos
como domar estes erros de modo a não comprometer a informação.
Existem basicamente três fontes de erro no cálculo numérico. A primeira está na própria
medida que fazemos da quantidade de interesse. Por exemplo, a régua escolar é um instrumento
de medida de comprimentos que tem uma precisão de 0.5 milímetro e suas medidas não são exatas.
O resultado de uma medição tem este erro (de 0.5mm), para mais ou para menos. E imaginando
que este é um dado de entrada num programa de computador, também os dados de saída terão erro,
que normalmente serão maiores que este (precisamente o erro relativo, que deniremos adiante,
será maior ou igual ao erro de entrada).
Temos ainda, estritamente no uso do computador, os erros gerados na conversão de números
entre bases e nas operações aritméticas. Vamos ilustrar como estes últimos podem ocorrer.
1.1
Conversão de bases
Representamos um número inteiro na base decimal através de uma seqüência de algarismos (e um
sinal):
12346
e podemos lê-lo como
12346 = 6 × 100 + 4 × 101 + 3 × 102 + 2 × 103 + 1 × 104 ,
que é a soma de um número nito de termos, todos múltiplos de alguma potência (positiva) de
10. Os algarismos usados vão de 0 a 9.
3
4
Cálculo Numérico
Generalizando, temos que um número na base b > 1 é representado por uma seqüência de
algarismos de 0 a b − 1 que se traduzem como a soma de termos, todos múltiplos de alguma
potência de b:
an . . . a1 a0 = a0 × b0 + a1 × b1 + · · · + an × bn .
Exemplos: Na base 3, 122 = 2 × 30 + 2 × 31 + 1 × 32 . Na base 2, 11 = 1 × 20 + 1 × 21 .
Precisamos portanto de uma maneira de converter números entre as bases, pois com os algarismos queremos representar sempre a mesma idéia de número ou quantidade. Vamos denotar
por (x)b o número x na base b. E vamos usar a base 10 como referência para nossos cálculos.
Dado um número na base 10, como passá-lo para base b? Vejamos dois exemplos iniciais com
inteiros
(17)10 = 2 × 30 + 2 × 31 + 1 × 32 = (122)3
Como conseguir os algarismos 122 dado o número 17 na base 10?
Observe a expressão entre os dois sinais de igualdade acima. Vemos que o resto da divisão
de 17 por 3 é 2, o primeiro algarismo. A parte inteira da fração 17
3 é 5 e o resto é 2. Agora
tome o novo dividendo como 5, o quociente da razão anterior. Temos 5 = 1 × 3 + 2, resto 2 é o
algarismo que multiplica a potência seguinte 31 . O novo dividendo é 1 que, sendo menor que 3,
já é o algarismo nal: 2 × 30 + 2 × 31 + 1 × 32 = (122)3 . Atenção e cuidado com a inversão dos
coecientes/algarismos para formar o número na última igualdade!
Deve estar claro que, no parágrafo anterior, podemos substituir os números ou mesmo as
bases por outros, e continuaremos com um processo nito. Este processo é o algoritmo de conversão de inteiros. Algoritmo é uma seqüência de instruções que pode ser programada. Acima
pode-se abstrair o algoritmo da situação descrita. O fundamento do algoritmo de conversão é o
assim chamado algoritmo de divisão de Euclides.
Exercícios
1.
2.
3.
4.
5.
Escreva o algoritmo da conversão de inteiros da base 10 para base 2.
Obtenha o número (17)10 na base 2, isto é, em binário.
Faça o mesmo para os seguintes números: 18, 19, 30, 31.
Escreva o algoritmo da conversão de inteiros da base 10 para base b > 1, b inteiro.
Escreva o algoritmo de conversão de inteiros entre duas bases quaisquer.
Vamos agora considerar o problema de conversão de um número real qualquer entre bases.
Veja que um número qualquer na base b é dado por
an · · · a1 a0 . a−1 a−2 · · ·
Cada ai é um algarismo. Por exemplo
1
1
= (0.333 . . .)10 ,
= (0.5)10
3 10
2 10
Como cada número é a soma de sua parte inteira e sua parte fracionária, e a parte inteira já foi
analisada, vamos olhar apenas a parte fracionária, depois do ponto decimal, pois a parte inteira
já foi analisada acima.
Túlio Carvalho
5
Veja que para escrever 1/3 na base 10 precisamos de um número innito de algarismos,
enquanto que para representar 1/2 na base dois só precisamos de um número nito. Aliás (1/2)2 =
1 × 2−1 = (0.1)2 .
É aqui que entra o problema do computador, que só pode `guardar' na sua memória uma
quantidade nita de algarismos. O armazenamento de um número no computador, através de sua
representação binária, possui sempre o mesmo número de dígitos, que depende do equipamento,
mas é sempre nito. Esta é uma fonte de erros, porque nem sempre a representação binária de um
número é nita. O interessante e diferente agora é que, mesmo que um número tenha representação
nita na base 10, ele não tem necessariamente uma representação nita na base 2.
Vejamos como se converte um número fracionário da base 10 para a base 2:
(0.25)10 =
1
= 1 × 2−2 = (0.01)2
22
A primeira igualdade é que precisamos generalizar. A idéia é usar que todo número entre 0 e 1
pode ser escrito como a soma da série de potências
a−1 a−2
a−n
+ 2 + ··· + n + ···
2
2
2
com ai ∈ {0, 1}, e partir desta série absolutamente convergente para obter o algoritmo que determina a seqüência de algarismos a−1 , a−2 , a−3 , · · · . O fato de podermos escrever qualquer número
x ∈ [0, 1) nesta forma pode ser justicado usando a teoria de séries.
Pegue x ∈ (0, 1), como descobrir a−1 ? Multiplicando x por 2, temos
2x = a−1 +
a−2
+ ···
2
e tomando a parte inteira dos dois lados: a−1 = [2x]. Como 2x < 2, a−1 é 0 ou 1. Para saber a−2 ,
def
tomamos a parte fracionária de ambos os lados: y = {2x} = 2x − a−1 . Este número é sempre
menor que 1. a−2 é a parte inteira de 2y . Este processo continua indenidamente, ou até que y
seja zero.
Vejamos um exemplo. x = (0.2)10 . 2x = 0.4 < 1, logo a−1 = 0. Faça y = 2x − a−1 = 0.4.
Atribua y a x: x := y 1 . Recomeçamos. 2x = 0.8 < 1, logo a−2 = 0, y = 0.8 e x := y .
(3)
(4)
(5)
x = 0.8, 2x = 1.6,
a−3 = 1, y = 2x − a−3 ,
x := y
x = 0.6, 2x = 1.2,
a−4 = 1, y = 2x − a−4 ,
x := y
x = 0.2, 2x = 0.4,
a−5 = 0, y = 2x − a−5 ,
x := y
e como ocorre a repetição de 0.2, temos que o processo vai se repetir indenidamente: a−5 =
a−1 , a−6 = a−2 , a−7 = a−3 , . . . , a−n−4 = a−n . (0.2)10 tem a seguinte expressão na base 2
0.00110011 . . .
Veja que é como uma dízima periódica, mas não é certo dizer dízima, pois esta palavra se refere à
base 10.
1
O sinal
:=
é a notação de `atribuição' que iremos usar. É uma operação distinta da igualdade.
6
Cálculo Numérico
Vejamos outros exemplos de conversão. x = 0.125
x = 0.125, 2x = 0.25,
a−1 = 0, y = 2x − a−1 ,
x := y
x = 0.25, 2x = 0.5,
a−2 = 0, y = 2x − a−2 ,
x := y
x = 0.5, 2x = 1,
a−3 = 1, y = 2x − a−3 ,
x := y
e o processo termina porque a−n = 0, para n ≥ 4. Então
(0.125)10 = (0.001)2 .
Vamos obter os oito primeiros algarismos depois do ponto2 na base 2 para x = (0.126)10 :
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
x = 0.126, 2x = 0.252,
a−1 = 0, y = {2x} = 2x − a−1 ,
x := y
x = 0.252, 2x = 0.504,
a−2 = 0, y = {2x} = 2x − a−2 ,
x := y
x = 0.504, 2x = 1.08,
a−3 = 1, y = {2x} = 2x − a−3 ,
x := y
x = 0.08, 2x = 0.16,
a−4 = 0, y = {2x} = 2x − a−4 ,
x := y
x = 0.16, 2x = 0.32,
a−5 = 0, y = {2x} = 2x − a−5 ,
x := y
x = 0.32, 2x = 0.64,
a−6 = 0, y = {2x} = 2x − a−6 ,
x := y
x = 0.64, 2x = 1.28,
a−7 = 1, y = {2x} = 2x − a−7 ,
x := y
x = 0.28, 2x = 0.56,
a−8 = 0
e haveria mais para calcular. Também não sabemos se a seqüência termina ou continua indenidamente. Obtemos a aproximação
(0.126)10 ≈ (0.00100010)2 .
É
importante notar que,
assim como (0.126)10
>
(0.125)10
temos
(0.00100010 . . .)2 > (0.001)2 , ou seja, a propriedade da ordem dos números na reta não depende
da base em que os representamos.
O sinal de aproximação acima foi colocado porque limitamos nossos cálculos para a conversão do número dado: x = 0.126. É esta exatamente a segunda fonte de erros no computador.
Ele estabelece: qualquer número que vou representar tem (digamos) 16 algarismos. Daí ele converte qualquer dado de entrada para um número, normalmente representado na base 2, com 16
algarismos.
6. Calcule os 8 primeiros algarismos, na base 2, de cada número dado na base 10: x = (1.1)10 ;
x = (1.125)10 ; x = (0.1125)10 ; x = (4.93)10 .
7. Estenda o algoritmo de conversão de números fracionários para base 3, aplicando-o aos seguintes
números (1/3)10 e (0.5)10 .
Agora podemos estudar somas, diferenças, produtos e razões entre números na base 2.
2
Costumamos dizer `depois da vírgula', mas vamos sempre usar o ponto para marcar o início das potências
negativas.
Túlio Carvalho
1.2
7
Operações aritméticas
A limitação no armazenamento de cada dado tem algumas conseqüências nas operações algébricas
realizadas no computador. Por isto, para ver como elas funcionam no computador e como geram
erros, convém denir o que é, para nossos propósitos, o computador:
Denição 1.
O sistema numérico de uma máquina é dado por uma base b > 1, um número de
algarismos t, um expoente máximo M e um expoente mínimo m. Cada número representável na
máquina é dado na forma
±0.d1 d2 . . . dt × bg e d1 ≥ 1
com m ≤ g ≤ M . Esta máquina é abreviadamente denotada por M(b, t, m, M ).
Exemplo: Tome b = 10, t = 5, m = −10 e M
Números representáveis na máquina:
0.12345 × 101 ,
= 10. A máquina é M(10, 5, −10, 10).
0.12121 × 10−10 ,
0.12122 × 1010 .
Números que só podem ser aproximados na máquina
0.122222,
1.22234,
1
.
3
π,
Note as seguintes propriedades sobre os números representáveis da máquina (em valor absoluto):
• existe um maior número positivo representável,
• existe um menor número representável, e ele é maior que zero!
No exemplo acima, o menor número representável é 0.1 × 10−10 e o maior é 0.99999 × 1010 .
Para identicar um número, bastam seus t dígitos e seu expoente g . Os t dígitos são chamados
mantissa do número:
expoente
0. 12000
| {z } ×10
z}|{
2
.
mantissa
Claro que na interação com a máquina, ela permite outras formas de dados de entrada, mas internamente ela os representa como denido acima. Por exemplo, o número cuja mantissa acabamos
de salientar seria convenientemente digitado como 12 (uma dúzia), sendo depois convertido para
a representação acima para qualquer uso futuro. Um número escrito à maneira da máquina tem
semelhança com a notação cientíca, para a qual o padrão é a base 10 (veja como está escrita a
velocidade da luz no seu livro de física).
Esta maneira de representar os números internamente explica como são feitas as operações
aritméticas.
Denição 2.
Considere uma máquina M(b, t, m, M ). Para efetuar a soma de dois números
positivos, a máquina alinha os pontos, colocando os dois números com o expoente igual ao maior
dos dois e soma as mantissas.
8
Cálculo Numérico
• Para efetuar a subtração de x por y , x 6= y , a máquina alinha os pontos como na soma e
subtrai como na aritmética dos reais a mantissa de x da de y .
• Para efetuar a multiplicação de dois números, a máquina multiplica as mantissas e soma os
expoentes. O sinal do resultado segue a regra dos sinais da aritmética usual.
• Para efetuar a divisão de dois números x/y , a máquina divide a mantissa de x pela de y e
subtrai o expoente de y do de x. O sinal do resultado segue a regra dos sinais da aritmética
usual.
Em todas as operações, se necessário, a máquina realinha o ponto de modo que a sua esquerda
que zero e o primeiro dígito à direita do ponto, d1 , seja maior que zero. Depois de posicionado o
ponto de modo que d1 > 0, a máquina trunca o resultado para t dígitos na mantissa.
Vamos dar alguns exemplos, começando com a operação de soma na máquina M(b = 10, t =
5, −10, 10)
1 + 12 =? x = 0.1 × 101 ,
y = 0.12 × 102
x + y =0.01 × 102
+0.12 × 102
=0.13 × 102
que é mostrado no display como 13. Mas se fosse x = 1 e y = 120000,
x + y =0.000001 × 106
+0.12 × 106
=0.120001 × 106
=0.12 × 106 ,
truncamento
Note que aqui a operação não é exata como a aritmética dos reais.
Multiplicação de x = 0.12 e y = 54.321
xy =(0.12 · 0.54321) × 102
=0.0651852 × 102
=0.65185 × 101 ,
truncamento.
Nos exercícios abaixo, faça os cálculos numa máquina M(b = 10, t = 5, −10, 10).
1. Para x = 0.12 e y = 0.54321, calcule (xy)/x e compare com y. O que você pode concluir das
operações na máquina?
2. No segundo exemplo, vimos que 1 + 120000 = 120000 na máquina. Para y = 1, existe x tal
que x + y = y na máquina?
3. Dados x = 5 e y = 1 × 106 , calcule (x + x) + y e x + (x + y).
Túlio Carvalho
9
4. Quando você digita 0 na máquina, qual valor pode ser usado como zero? Este é o valor que a
máquina usa quando tem que calcular x − x.
Para fazer estes exercícios numa calculadora, é necessário fazer a operação de truncamento
à mão, porque a sua calculadora tem provavelmente mais do que 5 dígitos para representar os
números (enquanto a nossa máquina tem t = 5). Existem algumas sosticações, como números
com precisão dupla, que podem ser (e são) implementadas nas máquinas que usamos, mas o porquê
da inexatidão das operações aritméticas é o truncamento.
1.3
Erros
Vimos acima que as operações aritméticas na máquina são geralmente diferentes daquelas que
˜ , mas não o fazemos. De
estamos habituados. Deveríamos denotá-las por outros símbolos: +̃, −̃,˜·, ÷
fato, elas se parecem com as operações usuais e pretendem imitá-las. Precisamos então quanticar
o sucesso desta imitação, e para isto denimos os erros. Nosso objetivo é sempre fazer cálculos em
que os erros não cresçam tanto de modo que os resultados (que são de fato aproximações) sejam
conáveis.
Denotemos o valor exato de um número por x e seu valor aproximado por x̄. Em geral x 6= x̄,
especialmente se x̄ é obtido após uma série de operações aritméticas. O sucesso de um algoritmo
está em administrar o módulo da diferença: |x − x̄|.
Denição 3.
número:
O erro absoluto é a diferença entre o valor exato e o valor aproximado de um
ea(x) = x − x̄.
O erro relativo é o erro absoluto dividido pelo valor aproximado do número:
er(x) =
x − x̄
.
x̄
Geralmente o valor exato x não é conhecido. Conhecemos x̄ e uma vez que saibamos ea(x)
podemos dizer em que intervalo x está. É este o fundamento de uma aritmética computacional
rigorosa, chamada aritmética intervalar. Usualmente trabalhamos com estimativas (cotas superiores) para ea(x). Convém ressaltar que as operações de subtração e divisão na denição de erro
são exatas.
Em primeiro lugar, vamos analisar o erro absoluto para dados de entrada, que suporemos
exatos. Em seguida, veremos como as operações aritméticas produzem erros nos resultados.
Como geralmente não sabemos o valor exato de um dado de entrada, convém obter o valor
máximo que ea(x) ou er(x) podem ter, independente de x. Primeiro note que ea(x) = x̄er(x). Logo
só precisamos obter um limitante superior para er(x) (isto é chamado estimar o erro relativo). Na
máquina M(10, 5, −10, 10), note o seguinte
1 + 1 × 10−5 = 1
assim como 1 + 2 × 10−5 = 1, até 1 + 9 × 10−5 = 1. Logo, todo o intervalo de valores [1 − 9 ×
10−5 , 1 + 9 × 10−5 ] é entendido pela máquina como 1. Calculando o erro relativo de qualquer x
10
Cálculo Numérico
neste intervalo
er(x) =
x−1
1
e
|er(x)| < 9 × 10−5 < 1 × 10−4 = 1 × 10−t+1 .
Como a diferença entre y e ȳ , para qualquer y , só pode estar no último dígito da mantissa,
y
−5
−5
ȳ ∈ [1 − 9 × 10 , 1 + 9 × 10 ] na nossa máquina. Assim
y
−t+1
|er(y)| = − 1 < 1 × 10−4 = |1 × 10
{z }
ȳ
(9)
em geral
Concluindo, o erro relativo em cada dado de entrada está sempre no penúltimo algarismo
da mantissa. Por isto se diz que a precisão da máquina, isto é, o número de dígitos signicativos
exatos de um dado, é t − 1.
Os erros absolutos e relativos crescem quando efetuamos operações. Pela denição das operações, no nal ocorre um truncamento, se necessário. Sabemos que o erro relativo de truncamento
é, para qualquer dado, limitado a 10−t+1 . Desta forma, para calcular o erro absoluto da soma,
temos que levar em conta os erros de cada fator e o erro devido à própria operação. Assim
(10)
ea(x + y) = x + y − (x̄+̃ȳ)
em que x̄+̃ȳ é o resultado numérico da soma de x̄ e ȳ . Sabemos que
(11)
x̄+̃ȳ = x̄ + ȳ + eo(+)(x̄ + ȳ)
em que eo(+) denota o erro (relativo) da soma. Como se pode notar pela Denição 2, os erros
das operações têm origem no truncamento, portanto o erro relativo de qualquer operação vale no
máximo 10−t+1 . Substituindo (11) em (10) vem que
ea(x + y) = (x − x̄) + (y − ȳ) + eo(+)(x̄+̃ȳ)
(12)
= ea(x) + ea(y) + 10−t+1 (x̄+̃ȳ) .
|
{z
} |
{z
}
dos dados
da operação
Os dois primeiros termos, que convém denotarmos por e1 , são devidos aos erros absolutos dos
dados x e y , enquanto o último termo provém da operação aritmética. O erro devido à operação é
sempre da forma acima: 10−t+1 z , em que z denota o resultado da operação. Por outro lado, para
cada operação, os erros absolutos provenientes de aproximações dos dados se propagam segundo
as regras de diferenciação:
• e1 da soma é a soma dos erros absolutos dos dados;
• e1 da diferença é a diferença dos erros absolutos dos dados;
• e1 do produto: e1 (xy) = x̄ea(y) + ȳea(x);
• e1 do quociente: e1 (x/y) =
x̄ ea(y)−ȳ ea(x)
ȳ 2
Túlio Carvalho
11
Para obter o erro relativo, basta dividir o erro absoluto em cada fórmula pelo resultado da
operação. Por exemplo
e1 (xy) + eo(·)x̄˜·ȳ
x̄˜·ȳ
x̄ea(y) ȳea(x)
+
+ eo(·)
=
x̄˜·ȳ
x̄˜·ȳ
=er(y) + er(x) + eo(·).
er(xy) =
(13)
Nos cálculos com erros, termo que tem erro multiplicado por outro erro é desprezado. Eles são
chamados termos de segunda ordem. Isto justica a última igualdade, porque nela usamos, por
exemplo, ȳ/(x̄˜·ȳ) = 1/x̄, mas isto só vale aproximadamente, pois um possível truncamento ocorre
em x̄˜·ȳ .
1. Tome dois dados x = 1234 e y = 1233 com erro relativo padrão de 10−4 na máquina
M(10, 5, −10, 10). Calcule o erro relativo de x − y e expresse-o em porcentagem. Este problema é chamado de cancelamento subtrativo.
2. Calcule o erro relativo de z = 3x̄ e w = x̄ + x̄ + x̄. Note que 3 e x̄ já são números exatos na
máquina.
Como regra geral a ser seguida, sempre que for somar uma seqüência de números, convém
colocá-los em ordem crescente, como ilustra o exercício:
3. Calcule o erro relativo nas seguintes operações, dados x = 5, y = 120000: x + x + y e y + x + x.
A associatividade é da esquerda pra direita.
1.4
Instabilidade de algoritmos
Os algoritmos fazem operações repetidas vezes. Pode acontecer de os erros das operações aritméticas se acumularem, provocando erros relativos grandes nos resultados. Veremos dois exemplos.
R
Exemplo 1. Cálculo de In = 01 xn ex−1 dx, para n = 1, 2, · · · . Integrando por partes
In =
1
xn ex−1 0
Z
−n
1
xn−1 ex−1 dx
0
= 1 − nIn−1
A fórmula In = 1 − nIn−1 é uma fórmula recursiva para o conjunto de integrais In , porque uma
vez conhecido o valor de In−1 , podemos imediatamente calcular o valor de In . Ela fornece um
algoritmo para calcular cada integral In . Num algoritmo, a execução de um conjunto de instruções
(fórmulas, atribuições, etc) que se faz repetidas vezes é chamado laço ou iteração.
Para começar, podemor calcular diretamente I1 = 1/e ∼
= 0, 367879 na máquina M(10, 6, −19, 20).
12
Cálculo Numérico
Daí que
I1 ∼
= 0, 367879
I2 ∼
= 0, 264242
I6 ∼
= 0, 127120
I7 ∼
= 0, 110160
I3 ∼
= 0, 207274
I4 ∼
= 0, 170904
I8 ∼
= 0, 118720
∼
I9 = −0, 068480
I5 ∼
= 0, 145480
O resultado de I9 tem erro relativo maior que 100%, pois as integrais In são todas positivas, uma
vez que o integrando é positivo.
O fato de multiplicarmos por um número n > 1 uma aproximação aumenta o erro na próxima
aproximação. De fato, o erro em I9 é da ordem de 9!10−7 = 0, 16. Podemos escrever a fórmula
recursiva do algoritmo da seguinte maneira
In−1 =
1 − In
n
e obter um algoritmo cujo erro diminui a cada iteração. No entanto precisamos de uma aproximação para n grande. Isto pode ser feito notando que
Z
In =
1
n x−1
x e
Z
dx ≤
0
1
xn dx =
0
1
n+1
e portanto In → 0 quando n → ∞.
Assim, tomando I2 0 ∼
= 0, podemos calcular I9 ∼
= 0, 091612 e além disto o erro diminui a cada
iteração (começando pela cota 1/21).
Exemplo 2. Cálculo de raízes de equações do segundo grau.
A fórmula de Bhaskara para a solução de uma equação do segundo grau, ax2 + bx + c = 0,
x=
−b ±
√
b2 − 4ac
2a
dá um resultado ruim quando b é muito grande.
Na máquina M(10, 6, −19, 20), para a = 1, b = 104 e c = 1, temos
x1 =
−b −
√
b2 − 4ac ∼
= −104
2a
e x2 = 0. Exatamente por causa do cancelamento subtrativo, temos em x2 um erro relativo de
100%. Podemos evitar o cancelamento subtrativo (veja exercício 1 da seção anterior), usando as
seguintes fórmulas para as soluções:
√
−b − sinal(b) b2 − 4ac
x1 =
2a
c
x2 =
ax1
Túlio Carvalho
13
em que a última relação decorre da fatoração ax2 + bx + c = a(x − x1 )(x − x2 ). No exemplo acima,
temos a aproximação em M(10, 6, −19, 20) para x2 = 10−4 , que é bem melhor.
Como regra geral, deve-se evitar operações aritméticas que produzam números grande demais
ou muito próximos de zero. Nas operações recursivas (como no exemplo 1), evitar que o erro de
uma iteração seja multiplicado por um número maior que 1.
Download