Erros Numéricos no Computador
Foto de João G.
Por: João G.
10 de Dezembro de 2021

Erros Numéricos no Computador

Representação Numérica e Introdução aos Principais Erros em Cálculos Numéricos

Cálculo

Representação Numérica e Erros

 

Com o objetivo de entender melhor a geração e propagação de erros nos cálculos numéricos é necessario um estudo de como o computador representa e processa internamente os números. A  necessidade de controlar e avaliar a geração dos erros e o impacto no resultado final é importante, pois o resultado pode estar desprovido de confiabilidade mínima devido ao excesso de erros envolvidos.

A representação e processamento de um numero real no computador se faz através da aritmética de ponto flutuante.

Um numero real representado em ponto flutuante pode ser escrito como:

onde temos um sinal representando se o numero é positivo ou negativo, uma mantissa (parte fracionaria do numero) representada pelos dígitos b_1,b_2, ...b_k , um expoente e$ e uma base beta.
Normalmente a mantissa e representada normalizada com primeiro digito apos o ponto decimal =1 , e a vasta maioria dos computadores utiliza base =2, então nossa representação fica:

Como exemplo um computador com palavra (word) de 32 bits (cada bit representa um numero binário 0 ou 1), ou  4 bytes (cada byte é um conjunto de 8 bits), tem seus números representado na memoria como abaixo, onde d representa um bit (0 ou 1):

https://profes.com.br/arquivos/joaoguedes/pontoflutuante1/

 

Temos 1 bit para o sinal do numero (sinal da mantissa), 7 bits para o expoente sendo 1 para sinal e outros seis para magnitude do expoente, e 24 bits para magnitude da mantissa. Convencionalmente, para bit de sinal 0 representa +(positivo) e 1 representa -(negativo).
Considere um  numero N representado na maquina na base 2 como:

N = 1   0000010   110100000000000000000000

Se trata de um numero negativo pois o primeiro bit de sinal é 1. O bit de sinal do expoente eh 0 , então temos um expoente positivo. As magnitudes do expoente e da mantissa aparecem tambem na figura abaixo, que mostra como converter este numero para o valor decimal, base 10:

https://profes.com.br/arquivos/joaoguedes/pontoflutuante2/

 

Em resumo, para o numero N acima representado na base 2 temos:  

Sinal da mantissa : negativo 

Magnitude da mantissa : 0,8125 decimal

Sinal do expoente: positivo

Magnitude do expoente: 2 decimal


Logo o numero na base decimal é:

 

Como outro exemplo vamos representar o numero decimal 42.78125 na base binaria normalizada :

Temos que:

Porem

logo o numero é representado com expoente, mantissa e sinais como: 

 

O maior numero que se pode representar nesta maquina é:

 

Erros de Arredondamentos


Devido a palavra das maquinas serem finitas, temos duas maneira de representar um numero de ponto flutuante em uma maquina, o arredondamento e o corte. Considere um numero decimal:

Representado em ponto flutuante como:

Quando o numero é cortado para k bits, simplesmente os demais dígitos a direita são desprezados. Quando o numero é \textbf {arrendondado} para k bits, observamos o digito k+1 se for maior igual a 5 ,somamos 1 no bit k e desprezamos os demais bits, se for menor que 5 simplesmente desprezamos os demais bits igual ao corte.
Considere o numero  e = 0.2718281828 . . . × 10^1
Se for representado em ponto flutuante com k=7 dígitos, usando arredondamento, como o digito de ordem k+1 = 8, maior que 5, temos que somar um ao digito de ordem 7:

Porem se utilizarmos o corte temos:

O erro que resulta de substituir um número exato pela sua forma em ponto flutuante é chamado de erro de arredondamento.
Este erro é igual a diferença entre x e flutuante de x.
Se o erro absoluto é dado por  |x-fl(x)| então o erro relativo é dado 

Exemplo quando usamos o corte o erro relativo é dado pela fórmula abaixo

entao

De maneira análoga quando usamos arredondamento o erro relativo é dado pela fórmula abaixo

Para um computador binario com k bits de mantissa o erro relativo é de 2^{-k } para arredondamento e 2^{1-k} para corte.
Dizemos  que  x* é uma aproximação para x ,  com k algarismos significativos se:

Por exemplo vamos aproximar x=3,1415 por x* com 3 algarismos significativos, então:

e

 

Erros de Truncamento


 Este tipo de erro ocorre devido a terminarmos uma serie infinita aproximando uma função com um numero finito de termos e desprezando o resto. Por exemplo considere a serie de Taylor representando cos(x):

trata-se de uma serie infinita , porem vamos aproximar o cos(x) pelos três primeiros termos da serie:

como

temos uma aproximação com 5 dígitos significativos.


Podemos estimar o erro de truncamento da serie acima pela formula do resto do polinômios de Taylor:

como

entao o resto 

e com 

obtemos:

 

Propagação de Erros


Conforme vimos anteriormente para uma máquina decimal com k dígitos na  da mantissa o limite do erro de arredondamento vale aproximadamente 5x10^{-k}
Definindo a precisão da máquina como eps =  5x10^{-k} o erro numa operação de arredondamento pode ser escrito como

Então as operações aritméticas reais da máquina, soma, subtração, produto e divisão serão operações imperfeitas que adicionarão um erro. Chamaremos estas operações imperfeitas como abaixo, adicionando um asterisco ao lado do operador:

Para estudarmos a propagação dos erros, cada operação que introduz um erro em relação a operação ideal, é representada como abaixo com um fator multiplicativo sobre a operação ideal:

Além do mais as operações em ponto flutuante não precisão ser associativa ou distributiva conforme o exemplo abaixo

Se realizarmos as operações de duas maneiras diferentes quanto a associação dos termos, teremos:

mostrando claramente a diferença no resultado final, entre a mesma operação de soma, porém realizada em ordem diferente de associação.
Todos os erros podem ser propagadas a cada nova o cálculo e aproximação ,com vários fatores multiplicadores que podem invalidar a acurácia do resultado final.
Retornando ao caso da soma anterior temos:

onde desprezando os termos de segunda ordem em  , pois sao muito pequenos.
Temos nesse caso o fator de ampliação como

calculando

obtemos um erro muito grande em comparação a 1 influenciando sobremaneira o resultado final.
Fazendo o calculo análogo, no segundo caso, agora com associação primeiro de (b+c), obtemos:  

calculando, 

obtemos um fator de ampliação próximo de 1, muito menor que no caso anterior.\\\\ Fica clara a grande diferença no impacto do resultado na propagação de erros, entre os dois casos estudados, na operação de soma de três números, comparando os dois esquemas onde a associação e precedência das operações são diferentes. 

 

João G.
João G.
Rio de Janeiro / RJ
Identidade verificada
1ª hora grátis
nota média
0
avaliações
R$ 80
por hora
Graduação: Engenharia Eletrônica (Universidade Federal do Rio de Janeiro (UFRJ))
Cálculo I, Cálculo IV, Cálculo III
Aulas de matemática e física para ensino fundamental ,medio e superior. Professor com técnica testada. Engenheiro eletrônico com pós graduação .

Confira artigos similares

Aprenda sobre qualquer assunto