Como as Calculadoras calculam as funções matemáticas?
em 02 de Dezembro de 2021
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.