1. O documento discute erros numéricos em representação de ponto flutuante em computadores, como números reais são armazenados de forma aproximada devido à limitação de bits.
2. Exemplos mostram como erros de representação numérica podem ter consequências graves, como um erro de 0,34 segundos que levou à morte de 28 pessoas no sistema Patriot.
3. São definidos conceitos como erro absoluto, erro relativo, arredondamento e truncamento na representação numérica aproximada de números.
1. 1
ERRO NA ARITMÉTICA DE PONTO FLUTUANTE
ALEXANDRE GROSSI1
Resumo – Intuitivamente “errar é humano” e
quando isso acontece podemos ter
consequências às vezes impensáveis sobre
isso. O erro também está associado a
máquinas (computadores, calculadoras entre
outros). Com este trabalho busca-se fazer
uma leitura do erro e suas ocorrências. Faz-
se uma leitura de representação numérica do
erro e trazemos alguns exemplos como parte
prática do trabalho
Introdução
Quando pensamos no nosso trabalho do
dia-a-dia o reconhecimento de problemas não é
uma tarefa fácil. Os problemas estão ligados a
áreas de exatas, humanas, biológicas,
econômicas, sociais, entre outras. Também
estão associados à qualidade de vida,
linguísticas, qualidade total, práticas educativas,
leitura e escrita, avaliação em saúde e até
problema de bioética.
Em (Hilbert, 2003) coloca-se a ideia que as
questões relacionadas à matemática também
precisam soluções a seus problemas. Em
(Ruggiero, 1996) pondera que se em todas as
fases de solução de problema sua iterações
tenham sidas realizadas corretamente, não é raro
acontecer que os resultados finais estejam
distantes do que se espera acontecer. Ainda em
(Filho, 2001) o autor alega que os resultados
obtidos podem surgir por várias fontes de erros.
Avaliar estes resultados e a existência do
erro é verificar as operações numéricas
efetuadas, suas representações e precisões
obtidas. Para ambos os autores (Filho, 2001) e
(Ruggiero, 1996) é de importância fundamental
conhecer as causas do erro encontrado com o
intuito de minimizar suas consequências.
Na representação dos números, existe um
modo de armazená-los em uma forma
padronizada, onde as operações são realizadas
de forma organizada, dentro de uma estrutura de
máquina. Nos anos de 1970 a 1980, foi
levantada a necessidade de termos uma
padronização no intuito de tornar invariáveis os
resultados obtidos por um mesmo programa
1
alexandregrossi15@gmail.com Aluno do PPGEL –
Programa de Pós Graduação de Engenharia Elétrica
da UFSJ – Universidade Federal de São João del Rei
computacional executado por diferentes
máquinas.
Criou-se então um grupo, conhecido por
IEEEp754, cujas as metas passavam também
por padronizar o arredondamento nas operações
numéricas realizadas por esses programas em
uma base, que para estes caso tornou-se uma
base binária
Entende-se que se há uma distância do que
se espera acontecer, o seu resultado tem um
erro. Propõe-se então tratar da análise dos erros
em processo numéricos com o estudo destes e
suas noções que surgem de suas representações
além de apresentar os tipos de erros que possam
surgir junto às operações efetuadas.
Representação numérica
Em determinadas situações reais algumas
soluções são impraticáveis, onde problemas são
medidas físicas.
Peguemos o exemplo na guerra do Golfo
em que uma falha no sistema de rastreamento e
intercepção de mísseis do sistema de defesa
Patriot, levou a 28 americanos mortos. A falha
ocorreu devido a uma limitação numérica,
levando a um erro de 0,34s no cálculo do tempo
de lançamento.
O sistema do míssil Patriot usava um
conjunto de 24 bits para sua representação.
Devido ao truncamento na unidade de tempo de
incremento do relógio, ao final de 100 h de
funcionamento gerou-se um acúmulo no seu
incremento um erro físico de 687 metros.
Baseado em (Ruggiero, 1996) a
representação de um número depende, portanto
da base escolhida ou disponibilidade na
máquina em uso e do número máximo de
dígitos usados em sua representação. O número
π é um exemplo que não é possível sua
representação por um número finito de dígitos.
Como dito anteriormente, outra observação
na representação de números é a sua conversão
computacional. A entrada de dados é feita por
um usuário no sistema decimal. As operações
são realizadas pelo computador no sistema
binário e resultados entregues ao operador na
tela convertidos ao sistema decimal. É
ressaltado que em uma base um número pode
ter uma representação finita e em outra
representação infinita.
Um computador que opera no sistema
binário irá armazenar sempre uma aproximação
de um número, uma vez que possui quantidade
fixas de posições e é esta aproximação que será
usada para realizar os cálculos.
Ao se tentar representar um número real
normalmente ele é arredondado, de modo a
poder ser escrito no número finito de bits onde
2. 2
precisa ser armazenado. Dessa forma, é,
automaticamente, introduzido um erro e ele não
mais representa o número desejado.
Para uma melhor compreensão do efeito
destes erros, faz-se necessário entender como os
números são armazenados dentro do
computador. Atualmente estes representam
número na base binária, realizando suas
operações aritméticas nessa base.
Um número inteiro é facilmente
armazenado em computadores digitais.
Tipicamente é armazenado em um computador
como uma sequencia de dígitos binários de
comprimento fixo. Assim um número inteiro
(𝑛 / 𝑘) possui sua representação, sendo:
𝑛 = ±(𝑛−𝑘 𝑛−𝑘+1 … 𝑛−1 𝑛0)
= ±(𝑛0 𝛽0
+ 𝑛−1 𝛽1
+ ⋯ + 𝑛−𝑘 𝛽 𝑘
)
onde β é uma base fixa ≥ 2
Já um número real pode ser representado
por um ponto fixo ou por pontos flutuantes.
Para pontos fixos podemos representar o
mesmo por:
𝑥 = ∑ 𝑥𝑖 𝛽−1𝑛
𝑖=𝑘 , para 𝑥 inteiro
O sistema de ponto flutuante normalizado
(aqui chamamos de 𝑓) é definido como um
conjunto de número, incluindo o zero, número
qualquer de base β, na análise do ponto
flutuante que possui t dígitos de precisão e
expoente 𝑒 de intervalo [m,M], pode ser
representado por:
𝑋 = ± (0, 𝑑1 𝑑2 𝑑3 … . 𝑑 𝑡) 𝛽 ∗ 𝛽 𝑒
;
Onde ainda podemos representar por
(Diniz, 2006):
#𝑓(𝛽, 𝑡, 𝑚, 𝑀)
E sua cardinalidade dada por (Cardona,
2010):
#𝑓(𝛽, 𝑡, 𝑚, 𝑀) = 2(𝛽 − 1)𝛽 𝑡−1(𝑀 − 𝑚 + 1) + 1
Como já comentado, durante as etapas de
solução de problemas, surgem várias fontes de
erros que podem alterar profundamente os
resultados obtidos. Uma fonte clara de erro
neste momento é a limitação devido ao número
de bits da máquina. É de importância principal
avaliar sua origem para tornar mínimos seus
resultados.
Estudo de erros
Erro absoluto e erro relativo
Imaginem que queremos estudar uma
situação real, tarefas de nosso dia-a-dia. Como
dito no início deste estudo, imagine que
queremos entender uma ocorrência na área de
exatas, uma análise do SEP (Sistema Elétrico de
Potência).
Vista a complexidade do SEP não é
possível simplesmente reproduzirmos o mesmo
com seus equipamentos e puramente
simularmos situações físicas buscando seu
entendimento. Isso é inviável fisicamente. A fim
de prever o comportamento destes grandes
sistemas faz-se necessário simularmos os
mesmos. Pode-se então simular sistemas através
de seus modelos.
A modelagem matemática consiste na
tentativa de se descrever matematicamente um
fenômeno (Wikipédia). Estes modelos se
utilizam de leis e/ou fenômenos (físicas,
biológicas entre outros), bem como dados
experimentais que venham a representar, de
forma aproximada, problemas físicos. Como
raramente se tem uma representação exata
destes fenômenos (Diniz, 2006) ou
experimentos, possíveis simplificações podem
levar a um modelo falso à realidade. Neste
momento, ao confrontar os dados reais aos
resultados obtidos na validação do modelo, pode
estar sendo gerado um erro.
Buscar uma solução de um problema passa
por algumas fases de interpretação do mesmo.
Estabelecer um modelo matemático,
metodologia destinada a resolver o modelo e sua
validação são itens que trazem esta solução.
Erros e incertezas adentrados em cada etapa
contaminam o resultado esperado.
Na análise de erro numérico, podemos
inicialmente entender duas medidas
relacionadas entre si: erro absoluto e erro
relativo.
Seja 𝑋, o valor exato, mas não conhecido,
de um número e 𝑉𝐴(𝑋) o seu valor aproximado,
conhecido por sua representação de ponto
flutuante (Gaelzer, 2011). Podemos definir:
𝐸𝐴(𝑋) = |𝑋 − 𝑉𝐴(𝑋)|,
sendo 𝐸𝐴(𝑋) o erro absoluto (estimável).
Conhecendo 𝑉𝐴(𝑋) e 𝐸𝐴(𝑋) podemos afirmar
que:
𝑋 = 𝑉𝐴(𝑋) ± 𝐸𝐴(𝑋)
Assim o erro relativo 𝐸𝑅(𝑋) fica definido
como:
3. 3
𝐸𝑅(𝑋) = |
𝑋 − 𝑉𝐴(𝑋)
𝑉𝐴(𝑋)
|
Arredondamento e truncamento
Pode-se conceituar arredondamento de uma
forma simples e direta. Diz-se que
arredondamento é o processo mediante o qual se
eliminam algarismos de menor significância a
um número.
Pode-se ainda explicar que o
arredondamento de casas decimais é a alteração
matemática de um número por outro que seja
aproximadamente equivalente em que se busca
um número adequado de algarismos
significativos.
Em (Crespo, 2009) o autor nos diz que
muitas vezes é apropriado eliminar unidades
inferiores as de determinadas ordem e ainda cita
a resolução número 886/66 da fundação IBGE
como referência de um método para
arredondamento de um número. Assim temos:
1. Quando número < 5 – conserva-se
o algarismo a ser arredondado
2. Quando número > 5 – aumentou
uma unidade no algarismo a ser
arredondado
3. Igual a 5:
Seguido de outros algarismos onde
pelo menos 1 é diferente de zero,
aumentamos uma unidade no algarismo
a ser arredondado;
Seguido de zeros conservamos o
algarismo a ser arredondado se ele for
par ou aumentamos se ele for ímpar.
Da mesma forma simples que definimos o
arredondamento de um número, o truncamento
em seu conceito seria a ação de omitir um
determinado valor em suas casas decimais. Dá-
se principalmente quando se quer ignorar
valores de um determinado cálculo.
Um método bastante interessante de
arredondamento foi apresentado em (Vilela,
2011) e iremos aqui utiliza-lo como método
dentro de nossa proposta.
Dado X seja X−
sua representação em
#f(β, t, m, M). Se 𝑋 ≠ 0, então escolhemos 𝑠 e
𝑒 tais que:
|𝑋| = 𝑠 ∗ 𝛽 𝑒
;
𝛽−1
(1 − 1
2⁄ 𝛽−𝑡
) ≤ 𝑠 ≤ (1 − 1
2⁄ 𝛽−𝑡
)
Onde analisamos quais os valores
permitidos para 𝑠.
Se 𝑒 ∈ [−𝑚, 𝑀] então calcula-se
|𝑋| = 𝑠 + 1
2⁄ 𝛽−𝑡
;
E truncamos em 𝑡 dígitos.
Erro de máquina
Vamos então definir alguns erros
envolvidos na representação de ponto flutuante
e suas operações algébricas.
Como já definido, ao tentarmos representar
números em um computador, estes provocam
erros, não só em sua representação, mas também
em seus métodos algébricos. Ainda em
(Gaelzer, 2011) é dado uma definição da regra
de arredondamento e truncamento diante da
representação de suas aproximações.
Dado 𝑋, representado em sua forma:
#𝑓(𝛽, 𝑡, 𝑚, 𝑀)
E um intervalo
𝑋− ≤ 𝑋 ≤ 𝑋−
Pode-se escrever 𝑋 como sendo:
𝑋 = (0, 𝑑1 𝑑2 𝑑3 … . 𝑑 𝑡) 𝛽 ∗ 𝛽 𝑒
+ 𝑔 𝑥 ∗ 𝛽 𝑒−𝑡
;
Onde 0 ≤ 𝑔 𝑥 < 1 é a parcela de 𝑋que não
pode ser incluída na sua representação.
No truncamento a ideia é simplesmente
ignorar 𝑔 𝑥. Assim:
𝐸𝐴(𝑋) = |𝑋 − 𝑉𝐴(𝑋)|,
𝐸𝐴(𝑋) = 𝑔 𝑥 ∗ 𝛽 𝑒−𝑡
,
e
𝐸𝑅(𝑋) = |
𝑋 − 𝑉𝐴(𝑋)
𝑉𝐴(𝑋)
|
𝐸𝑅(𝑋) = |
𝑔 𝑥 ∗ 𝛽 𝑒−𝑡
,
(0, 𝑑1 𝑑2 𝑑3 … . 𝑑 𝑡) 𝛽 ∗ 𝛽 𝑒
| <
𝛽−𝑡
(0,1) 𝛽
𝐸𝑅(𝑋) = 𝛽−𝑡+1
No arredondamento, executam-se as
seguintes operações:
𝑉𝐴(𝑋)
= {
(0, 𝑑1 𝑑2 𝑑3 … . 𝑑 𝑡) 𝛽 ∗ 𝛽 𝑒
→ |𝑔 𝑥| < 1
2⁄
(0, 𝑑1 𝑑2 𝑑3 … . 𝑑 𝑡 + 1) 𝛽 ∗ 𝛽 𝑒
→ |𝑔 𝑥| ≥ 1
2⁄
4. 4
𝐸𝐴(𝑋) =
{
|𝑔 𝑥| ∗ 𝛽 𝑒−𝑡
→ |𝑔 𝑥| < 1
2⁄
|𝑔 𝑥 − 1| ∗ 𝛽 𝑒−𝑡
→ |𝑔 𝑥| ≥ 1
2⁄
(< 1
2⁄ ∗ 𝛽 𝑒−𝑡
)
𝐸𝑅(𝑋)
=
{
1
2⁄ ∗ 𝛽 𝑒−𝑡
(0, 𝑑1 𝑑2 𝑑3 … . 𝑑 𝑡) 𝛽 ∗ 𝛽 𝑒
, → |𝑔 𝑥| < 1
2⁄
1
2⁄ ∗ 𝛽 𝑒−𝑡
(0, 𝑑1 𝑑2 𝑑3 … . 𝑑 𝑡 + 1) 𝛽 ∗ 𝛽 𝑒
, → |𝑔 𝑥| ≥ 1
2⁄
(≤
1
2⁄ ∗ 𝛽 𝑒−𝑡
(0,1) 𝛽 ∗ 𝛽 𝑒
= 1
2⁄ ∗ 𝛽−𝑡+1
Definir precisão acena ao quão próximo um
número representado no computador refere-se
ao número que realmente encontra-se nos
números reais. Relaciona-se a este a quantidade
de dígitos empregados em sua álgebra. Exemplo
disso é o número em 8 bytes diferentemente
representado em 4 bytes. Em geral, adota-se o
uso do erro relativo 𝐸𝑅(𝑋) para estimar a
precisão de uma aproximação, levando em
consideração a ordem de grandeza do valor de
𝑋.
Podemos ainda buscar uma verificação de
quão próximo estamos do valor correto que se
deseja representar. Este conceito de
proximidade ou acurácia (Gaelzer, 2011) está
ligados aos erros de truncamento e
arredondamento empregados no método
utilizado.
A necessidade de se verificar a acurácia de
um número se dá devido a um número não ter
representação finita em um sistema de análise
do ponto flutuante, ou não termos o número de
bits suficiente para sua concepção.
Há outra verificação importante que aqui
iremos somente citar, pois não é o objetivo
central do trabalho. A propagação de erros é um
fator a se considerar, pois é através deste estudo
que se determina a sensibilidade de um
determinado problema. Entramos aqui com o
conceito de condicionamento do problema.
Pensando em uma pequena variação nos
dados de entrada de um problema levar a uma
grande diferença no resultado final, temos então
o conceito de mal condicionamento, levando
assim a uma grande propagação de erros.
O contrário também é verdade quando
pensamos que uma pequena variação nos dados
de entrada leva a uma pequena diferença no
resultado, sendo assim essa operação numérica
bem condicionada.
Desenvolvimento do trabalho
O trabalho foi desenvolvido utilizando um
polinômio teste retirado de (Júnior, 2001). O
artigo referência propõe determinar estratégias
ótimas de irrigação para cultura de melancia,
considerando a água o fator limitante da
produção.
A função da produção utilizada tem a
seguinte configuração do segundo grau:
𝑦(𝑥) = 𝑐 + 𝑏𝑥 − 𝑎𝑥2
𝑦(𝑥) = 3,137 + 228,614𝑥 − 0,32089𝑥2
Onde 𝑦(𝑥) é a produção de frutos (Kg/ha) e
𝑥é a lamina de irrigação (mm).
Para determinados valores do preço do
produto, foram apresentados 3 valores de lâmina
entre máxima, ótima e equivalentes. Decidiu-se
por analisar duas condições de preço:
P/ 0,05 (US$/Kg) – x=[356,2;260,2;190,2]
P/ 0,35 (US$/Kg) – x=[356,2;36,0;3,6]
Para que fosse feito o estudo proposto,
optou-se pelo arredondamento da função
produção. A representação do ponto flutuante
#𝑓(10, 3, −1,4) foi escolhido aleatório para que
fossem permitidos os cálculos propostos.
1. Verificar valores permitidos para
s;
2. Verificar se o valor de 𝑒 ∈
[−𝑚, 𝑀];
Em ambos os itens foi utilizado às equações
propostas no estudo de arredondamento e
truncamento. Iremos aqui arredondar o índice 𝑎
como modelo e sua forma foi replicado aos
demais índices.
𝑎 = 0,32089 → 0,32089𝑥100
𝑒 = 0; 𝑑𝑒𝑛𝑡𝑟𝑜 𝑑𝑜 𝑖𝑛𝑡𝑒𝑟𝑣𝑎𝑙𝑜 [−1,4]
|𝑎| = 0,32089 + 1
2⁄ ∗ 10−3
= 0,32139
|𝑎| = 0,321𝑥100
3. Avaliar o erro da máquina
E ainda propõe definir:
4. Estimar novos valores para os
coeficientes da função teste após o
arredondamento e truncamento;
5. 5
5. Definir resultados para EA(x) e
ER(x)
Resultados
Inicialmente verificou os valores permitidos
para 𝑠, obteve:
0,09995 ≤ 𝑠 ≤ 0,9995
Para os valores a, b e c da função teste, foi
testado se e ∈ [−m, M] e verificado que todos
estavam dentro do intervalo proposto. Os
cálculos foram efetuados e assim obteve uma
nova função teste, sendo:
𝑧(𝑥) = 3,14 + 229𝑥 − 0,321𝑥2
𝑧(𝑥) = 0,314 ∗ 101
+ 0,229 ∗ 103
𝑥 − 0,321
∗ 100
𝑥2
No polinômio acima, com valores de
coeficientes normalizados, verificou que os
valores de s estavam dentro do esperado e os
valores de 𝑒 estavam dentro do intervalo do
ponto flutuante proposto [-1,4]
Para que facilitasse a obtenção dos
resultados elaborou uma rotina em MATLAB
R10, em anexo, e executou o programa. Os
dados de entrada foram apresentados acima.
Buscou-se então verificar os valores de
produção, onde dentro dos resultados
encontrados, efetuou-se o truncamento em t=3.
Valores p/Y Valores p/Z EA ER
40721.421
7769.109
1876.990
40844.960
37862.135
31946.431
123.539
3.0256
69.440
0.302
0.245
0.217
Tab.1 – Resultados para 0,05 (US$/kg) e
x=[356,2;260,2;190,2]
Valores p/Y Valores p/Z EA ER
40721.421
7817.367
821.988
40844.960
7831.124
823.379
123.539
13.7561
1.391
0.302
0.175
0.168
Tab.2 – Resultados para 0,35 (US$/kg) e x=[356,2;36,0;3,6]
Nas tabelas 1 e 2, os valores para Y são os
valores exatos da expressão, e os valores de Z
são valores encontrados após os coeficientes
normalizados.
Em um segundo momento, buscou-se
avaliar o erro de máquina. Neste caso definiu-se
considerar somente o coeficiente 𝑎 da função.
Não analisamos os outros coeficientes, pois os
mesmos encontravam dentro da proposição de
t=3.
𝑎 = 0,320 ∗ 100
+ 0,89 ∗ 100−3
;
𝑔 𝑥 = 0,89 ∗ 10−3
Por truncamento, ignora-se 𝑔 𝑥 e obtém:
𝐸𝐴(𝑥) = |𝑔 𝑥| ∗ 𝛽 𝑒−𝑡
= 0,89 ∗ 10−3
𝐸𝑅(𝑥) = 𝛽−𝑡+1
= 0,01
No estudo de arredondamento do erro de
máquina, observou inicialmente que 𝑔 𝑥 < 1
2⁄ ,
assim:
𝐸𝐴(𝑥) = |𝑔 𝑥| ∗ 𝛽 𝑒−𝑡
= 0,89 ∗ 10−3
𝐸𝑅(𝑥) = 1
2⁄ ∗ 𝛽−𝑡+1
= 0,005
Conclusões
O grande objetivo deste trabalho era
verificar a existência de erros dentro do conceito
de ponto flutuante e avaliar seu
equacionamento. Estas foram avaliadas na base
𝛽 = 10 e verificado sua validade.
Dentro dos resultados obtidos esta seria
nossa menor preocupação, uma vez que foi
verificada a manipulação das equações.
Este sim foi o verdadeiro ganho deste
trabalho, onde podemos comprovar que uma vez
que os números da função foram readequados
dentro dos conceitos de arredondamento e
truncamento, erros puderam ser observados.
Bibliografia
Cardona, A. V. (2010). Pontifícia
Universidade Católica /Rio Grande do Sul.
Fonte:
http://www.pucrs.br/famat/augusto/logica_mate
matica/SistemaPtFlut.pdf
Crespo, A. A. (2009). Estatística Fácil. São
Paulo: Saraiva.
Diniz, G. L. Estudo de erros. In: Cálculo
Numérico. Matemática - ICET - UFMT.
Frederico Ferreira Campos, F. (2001).
Algoritmos Numéricos. Rio de Janeiro: LTC.
Gaelzer, R. (2011). Representação de
Números e Erros. IFM/UFPel.
6. 6
Hilbert, D. (2003). Problemas Matemáticos.
RBHM , III, 5-12.
Júnior, A. S. (2001). Estratégias ótimas de
irrigação para a cultura da melancia. Pesq.
agropec. bras. , 36, 301-305.
Ruggiero, M. A. (1996). Cálculo Numérico
- Aspectos Teóricos e Computacionais. São
Paulo: Pearson Makron Books.
Vilela, P. Apostila de Métodos Numéricos
Para Engenharia I. Piracicaba: Engenharia de
Controle e Automação - Anhaguera.
Wikipédia. (s.d.). Fonte:
http://pt.wikipedia.org/wiki/Modelagem_matem
%C3%A1tica
Anexo
clc, clear all
% rotina para verificação dos valores de erro
relativo
% e erro absoluto a partir de uma função teste
% y(i) - função teste
% z(i) - função modificada a partir do
arredondamento de y(i)
% EA(i) - Erro Absoluto
% ER(i) - Erro Relativo
% x - Dados de entrada relacionado a lâmina de
irrigação
format long g;
x=[356.2 36.0 3.6];
%x=[356.2 260.3 190.2];
for i=1:length(x)
y(i)=3.137+(228.614*x(i))-(0.32089*x(i)^2);
z(i)=3.14+(229*x(i))-(0.321*x(i)^2);
EA(i)=z(i)-y(i);
ER(i)=(EA(i)/z(i))*100;
end
resultado=[y;z;EA;ER]';