Prévia do material em texto
Curso de Ciências da Computação
Disciplina: Cálculo Numérico Computacional
Prof. Adson Gomes de Ataídes
Modelagem matemática e métodos numéricos: erros e sistemas de ponto flutuante
Introdução
Neste capítulo, você vai aprender a identificar erros a partir de problemas físicos, além de saber
especificar as principais formas de erros numéricos. Ao longo da história, os métodos numéricos para
a resolução de problemas físicos de engenharia, seja na construção civil, de estradas ou até em
estimativas populacionais, apresentam erros, pois a solução numérica desenvolvida não apresentava
confiança nos resultados. Nesse sentido, a modelagem matemática representa o ponto de partida
do cálculo numérico, que se desenvolveu com a análise numérica e a computação científica como
campos de pesquisa emergentes, além da evolução da ciência da computação no século XX.
Erros em problemas físicos
No desenvolvimento da solução de um problema físico, os métodos numéricos utilizados na fase de
modelagem matemática e/ou de resolução apresentam resultados não confiáveis. Na matemática
apresentada no Ensino Médio, a modelagem matemática de problemas de cinemática, dinâmica e
hidrostática, entre outros, é simplificada a equações polinomiais de 1º e 2º graus. Ilustremos essa
situação a partir do cálculo da altura de um prédio por meio dos seguintes instrumentos: cronômetro
graduado em segundos e minutos, esfera de metal e modelo matemático do movimento de um corpo
sujeito a aceleração constante:
onde:
S = distância percorrida;
so = distância inicial;
vo = velocidade inicial;
t = tempo percorrido;
a = aceleração.
No experimento de largar a esfera de metal do prédio, decorreram quatro segundos até a esfera
tocar o solo. As condições do problema indicam que a velocidade inicial e a distância inicial são zero,
e que a aceleração constante corresponde à gravidade com uma aproximação de 9,8 m/s2.
Substituindo esses valores no modelo matemático, temos:
O valor que representa a altura do prédio é preciso? De certa forma, não podemos confiar nesse
resultado, pois não foram levadas em consideração no modelo matemático utilizado a resistência do
ar, a velocidade do vento no momento de realização do experimento, a precisão do cronômetro e a
unidade de aceleração da gravidade, que é definida como 9,80665 m/s2 (houve um arredondamento
para 9,8). Avaliando a precisão do cronômetro para um tempo medido de 4,2 segundos, a altura seria
86,436 m, ou seja, uma variação de aproximadamente 9,292% (86,432 m – 78,4 m = 8,032 m e
8,032/86,436 ≅ 0,09292) na altura do prédio em apenas 0,2 segundos. A variação do tempo marcado
é 4,761% (4,2 s – 4,0 s = 0,2 s e 0,2/4,2 ≅ 0,04761).
De forma geral, na solução numérica de um problema físico em que não há possibilidade de
representar finitamente os dígitos dos números, o resultado não será exato. Consequentemente, a
quantidade de dígitos utilizados na solução numérica vai afetar diretamente na precisão do resultado
a ser obtido. Outra situação de problema físico é o processo de interação entre o computador
(máquina) e o ser humano (usuário da máquina). Na troca de informações, o usuário insere dados na
base decimal e o computador funciona com dados na base 2 (sistema binário 0 e 1, com zero para
ausência de impulso elétrico e com um para a presença de impulso elétrico); todas as operações de
processamento são realizadas nesse sistema. Na saída das informações ocorre o procedimento
inverso de conversão dos dados. Essa interação usuário-computador é a origem de erros que
interferem no resultado de cálculos. Genericamente as fontes de erros se resumem a problemas na
fase de modelagem matemática ou na resolução do problema físico (BARROSO et al., 1987). A Figura
1 descreve os procedimentos de resolução de um problema físico.
Convertendo números binários em decimais e vice-versa
Inicialmente vamos adotar a seguinte notação para indicar a base numérica em que o número está
representado: (n)B, onde n indica o número representado, e B, a base à qual esse número pertence.
Podemos representar o número 286 na base dez como (286)10 e o número 11010 na base dois como
(11010)2. Esses números ainda podem ser representados como
(286)10 = 2 x 102 + 8 x 101 + 6 x 100
(11010)2 = 1 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 0 x 20
Aprendemos como representar os números na base dez e na base binária, mas como podemos
converter números decimais em binários e vice-versa?
De forma geral, um número na base B, (nini-1 ... n2n1n0)B, com n ≤ nj ≤ (B – 1) e j = 1, 2, ..., i,
pode ser escrito na forma: niBi + ni-1Bi-1 + ... +n2B2 + n1B1 + n0B0.
O procedimento de conversão de um número binário para um número decimal consiste em
multiplicar o digito binário por uma potência de 2 apropriada. Vejamos alguns exemplos de
conversão de números na base 2 para a base 10.
Exemplo 1
a) (1001)2 = 1 × 23 + 0 × 22 + 0 × 21 + 1 × 20 = 9 = (9)10
b) (11,1)2 = 1 × 21 + 1 × 20 + 1 × 2-1 = 2 + 1 + 0,5 = 3,5 = (3,5)10
c) (10,01)2 = 1 × 21 + 0 × 20 + 0 × 2-1 + 1 × 2-2 = 2 + 0 + 0 + 0,25 = 2,25 = (2,25)10
O procedimento de conversão de um número decimal para um número binário pode ser realizado
pelo método das divisões sucessivas. O número decimal a ser convertido é dividido por 2 até o último
quociente das divisões ser 0 na representação do algoritmo da divisão com o resto 1. A formação do
número binário é composta pelo inverso dos restos encontrados das divisões. Vejamos alguns
exemplos de conversão de números na base 10 para a base 2.
Exemplo 2
Como podemos chegar a essa conclusão: (43)10 = (101011)2?
Considerando o número (43)10, ou seja, o número 43 na base 10. Vamos representá-lo pelo algoritmo
da divisão (D = d ∙ q + r) com D = 43, d = 2, obtemos: 43 = 2 ∙ 21 + 1. O resto dessa divisão representa
o último dígito do número binário que desejamos encontrar; vamos repetir esse procedimento até o
quociente das divisões por 2 ser 0.
Para D = 43, temos r = 1, uma vez que 43 = 2.21 + 1
Para D = 21, temos r = 1, uma vez que 21 = 2.10 + 1
Para D = 10, temos r = 0, uma vez que 10 = 2.5 + 0
Para D = 5, temos r = 1, uma vez que 5 = 2.2 + 1
Para D = 2, temos r = 0, uma vez que 2 = 2.1 + 0
Para D = 1, temos r = 1, uma vez que 1 = 2.0 + 1
Dessa forma, (43)10 = (101011)2
Exemplo 3
Como representar um número fracionário da base 10, por exemplo, (0,375)10, em sua forma binária?
Consideramos o método de multiplicações sucessivas por 2. Realizando a multiplicação do número
fracionário por 2, do resultado desse produto consideramos a parte inteira como o primeiro dígito
do número binário e a parte fracionária é multiplicada por 2 até que o resultado dessa multiplicação
seja igual a zero.
Para f1 = 0,375, temos p1 = 0,750, uma vez que 0,375 ∙ 2 = 0,750. Consideremos 0 no dígito do número
binário a ser representado.
Para p1 = f2 = 0,750, temos p2 = 1,50, uma vez que 0,750 ∙ 2 = 1,50. Consideremos 1 no dígito do
número binário a ser representado.
Para p2 = f3 = 0,50, temos p3 = 1,00, uma vez que 0,50 ∙ 2 = 1,00. Consideremos 1 no dígito do número
binário a ser representado.
Dessa forma, (0,375)10 = (0,011)2
Representação de um número real em aritmética de ponto flutuante
Em um computador ou máquina, a representação de um número real é dada pela expressão
n = ± (0, d1, d2, ..., dq – 1, dq) × Bp, denominada representação em ponto flutuante normalizada,
com:
n = representação de um número real em computador;
d1, d2, ..., dq – 1, dq = mantissa ou total dígitos na parte do sistema de vírgula flutuante;
q = indica o número de dígitos;
B = base numérica;
p = expoente da base.
Apresentando as seguintes condições:
d1≠ 0
p ∈ [li, ls] ou li ≤ p ≤ ls
onde li corresponde a limite inferior, e ls, limite inferiordo intervalo do expoente da base.
De outro modo, a representação de um número real x em uma máquina F também pode ser dada
pela expressão:
𝐹(𝐵, 𝑞, 𝑙𝑖, 𝑙𝑠)
onde:
𝐵 = 𝑏𝑎𝑠𝑒
𝑞 = 𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑑í𝑔𝑖𝑡𝑜𝑠 𝑛𝑎 𝑚𝑎𝑛𝑡𝑖𝑠𝑠𝑎
𝑙𝑖 = 𝑣𝑎𝑙𝑜𝑟 𝑚í𝑛𝑖𝑚𝑜 𝑑𝑜 𝑒𝑥𝑝𝑜𝑒𝑛𝑡𝑒
𝑙𝑠 = 𝑣𝑎𝑙𝑜𝑟 𝑚á𝑥𝑖𝑚𝑜 𝑑𝑜 𝑒𝑥𝑝𝑜𝑒𝑛𝑡𝑒
Vejamos um exemplo de representação de números nas bases 2 e 10 por meio de aritmética de ponto
flutuante.
Exemplo 4
Dados os números (789,63478)10 e (1000)2, como esses números são representados em um
computador?
(789,63478)10 = 0,78963478 ∙ 103
(1000)2 = 0,1000 ∙ 24 = 0,1000 ∙ 2100, pois (4)10 = (100)2
Uma situação comum em máquinas ou computadores é a precisão de máquina. Como ilustração
dessa situação, observemos a máquina RS-43, que opera com os seguintes padrões de sistema
(Quadro 1).
Podemos determinar o maior e o menor número, em valor absoluto, da máquina RS-43 a partir dos
dados apresentados:
Menor número = (nmín) = 0,1000 × 10–4 = 10–5. Dessa forma, o menor número absoluto é
0,00001.
Maior número = (nmáx) = 0,9999 × 104 = 9999. Dessa forma, o maior número absoluto é
9999.
Considerando o conjunto: F = {n ∈ R | nmín ≤ |n| ≤ nmáx }, onde:
nmáx = maior valor absoluto apresentado pela máquina RS-43;
nmín = menor valor absoluto apresentado pela máquina RS-43;
n ∈ R = número pertencente ao conjunto dos números reais.
A partir desse argumento matemático surgem três situações, descritas a seguir.
Situação 1: |n| > nmáx
Nesta situação, o expoente p é maior que 4; portanto, a calculadora apresenta overflow, ou seja,
|n| > 9999.
Situação 2: |n| < nmín
Nesta situação, o expoente p é menor que – 4; portanto, a calculadora apresenta underflow, ou seja,
|n| < 0,0001.
Situação 3: n ∈ F
O número pode ser representado nessa calculadora sem nenhum tipo de problema, pois está dentro
do intervalo do sistema de números representados no limite inferior e superior do expoente
– 4 ≤ p ≤ 4.
Exemplo 5
A máquina TKS - 123 opera com os seguintes padrões de sistema (Quadro 2).
a) Quais são maior e o menor número, em valor absoluto, da máquina TKS – 123 a partir dos dados
apresentados?
Menor número = (nmín) = 0,10000 × 10–3 = 10–4. Dessa forma, o menor número absoluto é 0,0001.
Maior número = (nmáx) = 0,99999 × 103 = 999,99. Dessa forma, o maior número absoluto é 999,99.
b) Quais seriam as condições de underflow e overflow da máquina TKS – 123?
|n| > 999,99 condição de overflow
|n| < 0,0001 condição de underflow
Exemplo 6
a) Escrever o número (-3,625)10 no sistema F (10,5,-3,3)
1º passo: colocar o número na forma normalizada, observando que ele já se encontra na base do
sistema em questão.
(-3,625)10 = -0,3625 x 101
2º passo: verificar se o número de dígitos na mantissa é menor, igual ou maior do que a precisão do
sistema de ponto flutuante. Se for menor acrescentamos zeros, se for for igual já estará ok, e se for
maior haverá um truncamento ou arredondamento da mantissa. Nesse caso, o número de dígitos da
mantissa (4) é menor do que a precisão (5) do sistema, então teremos de acrescentar um zero à
direita.
(-3,625)10 = -0,3625 x 101 = -0,36250 x 101
b) Escrever o número (-3,625)10 no sistema F (2,5,-3,3).
1º passo: devemos transformar o número da sua base 10 para a base 2, que é a base de numeração
do sistema.
(-3,625)10 = (-11,101)2
2º passo: colocar o número na forma normalizada.
(-11,101)2 = -0,11101 x 102
3º passo: verificar se o número de dígitos na mantissa é menor, igual ou maior do que a precisão do
sistema de ponto flutuante. Neste exemplo, o número de dígitos da mantissa (5) é exatamente igual
à precisão (5) do sistema, então o número já está perfeitamente representado neste sistema de
ponto flutuante.
-0,11101 x 102
Observação: O número de casas decimais exatas da mantissa é um padrão utilizado para determinar
a precisão de uma máquina (RUGGIERO; LOPES, 1996).
Tipificação dos erros
O cálculo do volume de um cilindro é dado pelo produto de sua altura pela área de sua base. A área
da base é uma circunferência de raio r. A solução desse problema físico por métodos numéricos não
possui resultados confiáveis, ou seja, erros. Quais seriam os erros absoluto e relativo no cálculo da
área de uma circunferência de raio 25 cm? O problema inicial está na constante , apresentada no
modelo matemático da área da circunferência: A = π ∙r2
O erro absoluto de um número é dado pela expressão: EA = |nv – na|, onde:
EA = erro absoluto;
nv = valor considerado verdadeiro;
na = valor considerado como aproximado.
Já o erro relativo (ER) é calculado pela expressão ER = EA / nv. Se adotarmos πa = 3,14 como o valor
do número aproximado e πv = 3,141592 como valor do número π verdadeiro, podemos calcular a
área das circunferências com o valor aproximado e o valor verdadeiro da constante.
Aa = πa ∙ r2 = 3,14 ∙ (25)2 = 3,14 ∙ 625 = 1962,5 cm2
Av = πv ∙ r2 = 3,141592 ∙ (25)2 = 3,141592 ∙ 625 = 1963,495 cm2
Com isso, podemos calcular o erro absoluto entre as áreas das circunferências.
EA = |nv– na| = |Av – Aa| = |1963,495 – 1962,5| = 0,995
Agora, podemos calcular o erro relativo do problema físico apresentado.
ER = EA/Av = 0,995/1963,495 ≈ 5,067 × 10-4, adotando uma aproximação por truncamento com três
algarismos significativos.
Em uma máquina ou computador, a precisão influencia na leitura e representação dos números de
acordo com a quantidade de dígitos significativos, a base numérica utilizada e os limites inferior e
superior do intervalo do expoente. A aritmética do ponto flutuante apresenta os métodos numéricos
de arredondamento e truncamento para tentar resolver o problema dos números que não são
representados na mantissa, já que cada máquina apresenta uma quantidade de números
significativos que pode ser computada.
Para o truncamento, a parcela que não pertencente à representação de dígitos significativos é
descartada. Já no arredondamento, avalia-se se a parcela é maior que 5 ou menor que 5. Para o
primeiro caso, é adicionada uma unidade ao último dígito significativo; no segundo caso é mantida a
configuração até o dígito do número significativo.
Exemplo 7
a) Dados os números 12,659 (considerado como número verdadeiro) e 12,6 (considerado como
número aproximado) como percentuais de correção de juros em uma aplicação financeira dada pela
expressão: C = t ∙ (i + 1) para o tempo de capitalização de 6 meses, qual o erro relativo no valor da
monetização desse investimento?
Primeiro calculamos as aplicações financeiras para os valores aproximado e relativo do percentual
de correção de juros:
Ca = t ∙ (ia + 1) = 6 ∙ (12,6 + 1) = 6 ∙ (13,6) = 81,6 unidades monetárias
Cv = t ∙ (iv + 1) = 6 ∙ (12,659 + 1) = 6 ∙ (12,659) = 81,954 unidades monetárias
Agora, podemos calcular o erro absoluto entre os valores das capitalizações:
EA = |nv– na| = |Cv – Ca| = |81,954 – 81,6| = 0,354
Com isso, o erro relativo é dado por: ER = EA/Cv = 0,354/81,954 ≈ 4,32 × 10-3.
b) Considerando uma máquina de três dígitos significativos (q = 3), como ficaria representado o
número (429,857)10 por arredondamento e truncamento, respectivamente?
Primeiro representamos o número (423,857)10 em aritmética de ponto flutuante: 0,423857 ∙ 103.
Como a máquina considera apenas três dígitos significativos, avaliamos o primeiro número depois do
dígito significativo, que é 8; então, como 8 > 5, adicionamos 1 ao número 3. Por arredondamento,
temos: 0,424 ∙ 103. Por truncamento, consideramos apenas os dígitos significativos da máquina e
descartamos a parcela não considerada. Então, temos: 0,423 ∙ 103.
Observação: Quando se utiliza o arredondamento os erros cometidos sãomenores que no
truncamento, no entanto o arredondamento requer um maior tempo de execução e por esta razão
o truncamento é mais utilizado.
Exercícios
1- Considere o sistema F(10,4,-4,4). Represente neste sistema os números abaixo e se necessário
use truncamento:
a) 432124
b) -0,0013523
c) 125,64
d) 0,00034
2- Mudar a representação dos números:
a) (1101)2 para (n)10
b) (0,110)2 para (n)10
c) (13)10 para (n)2
d) (0,75)10 para (n)2
3- Considere o sistema F(3,2,-1,2). Responda:
a) Qual o menor número representável nessa máquina?
b) Qual o maior número representável nessa máquina?
c) Quantos números reais positivos podemos representar nesse sistema?
4- Considere o valor exato 𝑥 = 3247,512 e o valor aproximado 𝑥 ̅ = 3247,000. Determine para essa
aproximação o erro absoluto e o erro relativo.
5- Considere agora o valor exato 𝑥 = 1,512 e o valor aproximado �̅� = 1,000. Determine para essa
aproximação o erro absoluto e relativo.
6- Os erros absolutos e relativos serão usados como critério de parada em diversas sequências
numéricas de soluções aproximadas em procedimentos numéricos. Use cálculos efetuados nos
itens anteriores para justificar porque o erro relativo será preferível na maioria desses critérios
7- Considere o somatório 𝑠 = ∑ 𝑥𝑖
3000
𝑖=1
Ao efetuar a soma para 𝑋𝑖 = 0,11 em um computador operando no sistema binário foi obtido
𝑠 = 3299,99691 e em uma calculadora que opera na base 10 foi obtido 𝑠 = 3300.
a) ao converter (0,11)10 para base 2 essa representação será finita ou infinita? Justifique sua resposta
com cálculo até a nona casa decimal (9 dígitos na mantissa).
b) Utilize a resposta do item (a) para justificar a diferença dos valores obtidos para 𝑠𝑖 em um sistema
que opera na base 2 e outro que opera na base 10.
c) Considerando que a calculadora forneceu o valor correto para S1, determine o erro relativo para
o valor fornecido pelo computador.
Referências
Freitas, Raphael de, O. et al. Cálculo numérico. Disponível em: Minha Biblioteca, Grupo A, 2019.