Épsilon de máquina

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Gráfico de ((1+x)-1)/x calculado em sistema de numeração do tipo 'double'. Idealmente o resultado seria 1, o gráfico mostra o efeito da perda de significância na operação (1+x) quando x é pequeno. Quando x se torna menor que o épsilon de máquina, a expressão se torna nula.

Em aritmética de ponto flutuante, denomina-se épsilon da máquina o menor número que somado a 1 produza resultado diferente de 1, ou seja, que não é arredondado. O épsilon de máquina representa a exatidão relativa da aritmética do computador, e a sua existência é uma consequência direta da precisão finita da aritmética de ponto flutuante. O valor também é chamado de unidade de arredondamento ou menor número representável, e é simbolizado pela letra grega épsilon \epsilon.[1] [2]

Definição formal[editar | editar código-fonte]

Arredondamento é o processo de escolha da representação de um número real em um sistema numérico de ponto flutuante. Para um determinado sistema numérico e um procedimento de arredondamento, o épsilon de máquina é o máximo erro relativo do procedimento escolhido.

Algumas explicações são necessárias para se determinar o valor dessa definição. Um sistema numérico de ponto flutuante é caracterizado por uma base b, e por uma precisão p, por exemplo, o número de dígitos na base b da mantissa (incluindo qualquer bit implícito). Todos os números com o mesmo expoente e têm o espaçamento b^{e-(p-1)}. O espaçamento muda nos números que são potências perfeitas de b; o espaçamento no lado de maior magnitude é b vezes maior que o espaçamento no lado de menor magnitude.

Uma vez que o épsilon de máquina é o limite do erro relativo, é suficiente considerar números com expoente e=0. Também é suficiente para considerar números positivos. Para o método de arredondamento do valor mais próximo, o erro absoluto de arredondamento é no máximo metade do espaçamento, ou b^{-(p-1)}/2. Este valor é o maior numerador possível para o erro relativo. O denominador no erro relativo é o número sendo arredondado, que deve ser o menor possível para tornar o erro maior. O maior erro relativo, portanto, acontece quando o arredondamento é aplicado a números na forma 1+a onde a está entre 0 e b^{-(p-1)}/2. Todos esses números arredondam para 1 com erro relativo a/(1+a). O máximo ocorre quando a está no limite superior do intervalo. O 1+a no denominador tem pouca importância, sendo deixado de fora por conveniência, e apenas b^{-(p-1)}/2 é tomado com o épsilon de máquina. Como foi mostrado aqui, o erro relativo é maior para números que são arredondados para 1, então o épsilon de máquina também é chamado de unidade de arredondamento, significando simplesmente "o máximo erro que pode ocorrer quando se arredonda para o valor unitário".

Assim, o máximo espaçamento entre um número normalizado em ponto flutuante x, e um número normalizado adjacente é 2\epsilon x |x|.[3]

Modelo aritmético[editar | editar código-fonte]

A análise numérica usa o épsilon de máquina para estudar os efeitos dos erros de arredondamento. Os reais erros da aritmética computacional são complexos demais para serem diretamente estudados, então, em vez disso, o seguinte modelo simplificado é utilizado. O padrão aritmético da IEEE define que todas as operações de ponto flutuante são feitas como se fosse possível executá-las com precisão infinita, e então o resultado é arredondado para um número de ponto flutuante. Suponha que (1) x e y são números de ponto flutuante, que (2) \bullet é uma operação aritmética em ponto flutuante como adição ou multiplicação, e que (3) \circ é a operação de precisão infinita. De acordo com o padrão, o computador calcula:

x \bullet y = \mbox {round} (x \circ y)

Pela definição, o erro relativo do arredondamento é máximo quando igual ao épsilon da máquina, então:

x \bullet y = (x \circ y)(1 + z)

onde z em grandeza absoluta é no máximo \epsilon.

Como determinar o épsilon de máquina[editar | editar código-fonte]

Os valores de épsilon de máquina a seguir se aplicam a formatos padronizados de ponto flutuante:

IEEE 754 - 2008 Nome usual Tipo de dado em C++ Base b Precisão p Épsilon de máquina[a] b^{-(p-1)}/2 Épsilon de máquina[b] b^{-(p-1)}
binary16 meia precisão indisponível 2 11 (um bit implícito) 2 -11 = 4.88e-04 2 -10 = 9.77e-04
binary32 precisão singular float 2 24 (um bit implícito) 2 -24 = 5.96e-08 2 -23 = 1.19e-07
binary64 precisão dupla double 2 53 (um bit implícito) 2 -53 = 1.11e-16 2 -52 = 2.22e-16
binary80 precisão estendida _float80[4] 2 64 2 -64 = 5.42e-20 2 -63 = 1.08e-19
binary128 precisão quádrupla _float128[4] 2 113 (um bit implícito) 2 -113 = 9.63e-35 2 -112 = 1.93e-34
decimal32 precisão singular decimal _Decimal32[5] 10 7 5 × 10 -7 10−6
decimal64 precisão dupla decimal _Decimal64[5] 10 16 5 × 10 -16 10−15
decimal128 precisão quádrupla decimal _Decimal128[5] 10 34 5 × 10 -34 10−33

a de acordo com Prof. Demmel, LAPACK, Scilab b de acordo com Prof. Higham; Padrão ISO C; constantes de linguagem C, C++ e Python; Mathematica, MATLAB e Octave


O épsilon de máquina de um sistema pode ser aproximado (a um fator de 2) pelo seguinte algoritmo em pseudocódigo: [6]

eps=1
 
while (eps+1) > 1
   eps=eps/2
end
 
eps=eps*2

Cancelamento catastrófico[editar | editar código-fonte]

O cancelamento catastrófico é um efeito que ocorre quando excedemos o limite de precisão do sistema de numeração, sendo caracterizado por um aumento substancial do erro relativo dos resultados. O exemplo característico desse tipo de erro é quando o resultado da subtração de dois números se aproxima do valor do épsilon de máquina.[7]

Veja também[editar | editar código-fonte]

Referências

  1. Bortoli, Álvaro L.; Cardoso, Carolina; Fachin, Maria P. G.; Cunha, Rudnei D. Introdução a Cálculo Numérico. [S.l.: s.n.], 2003. p. 15.
  2. Sanches, Carlos A. A. Matemática Computacional: Erros de Arredondamento. [S.l.: s.n.], 2012.
  3. Higham, Nicholas. Accuracy and Stability of Numerical Algorithms (2 ed). [S.l.]: SIAM, 2002. 37 p.
  4. a b Floating Types - Using the GNU Compiler Collection (GCC)
  5. a b c Decimal Float - Using the GNU Compiler Collection (GCC)
  6. E. Elliott Ward Cheney, David Ronald Kincaid. Numerical mathematics and computing. [S.l.]: Cengage Learning, 2012.
  7. L.A.Sphaier, L.S.B.Alves. Representação de Números, Erros Numéricos e Aritmética Computacional. Disponível em www.sphaier.com