Perda de significância - Loss of significance

Exemplo de LOS no caso de calcular 2 formas da mesma função

A perda de significância é um efeito indesejável em cálculos que usam aritmética de precisão finita, como a aritmética de ponto flutuante . Ocorre quando uma operação em dois números aumenta o erro relativo substancialmente mais do que aumenta o erro absoluto , por exemplo, ao subtrair dois números quase iguais (conhecido como cancelamento catastrófico ). O efeito é que o número de dígitos significativos no resultado é reduzido de forma inaceitável. Maneiras de evitar esse efeito são estudadas na análise numérica .

Demonstração do problema

Subtração

O efeito pode ser demonstrado com números decimais. O exemplo a seguir demonstra o cancelamento catastrófico de um tipo de dados de ponto flutuante decimal com 10 dígitos significativos:

Considere o número decimal

x = 0.1234567891234567890

Uma representação de ponto flutuante deste número em uma máquina que mantém 10 dígitos de ponto flutuante seria

y = 0.1234567891

que é bastante próximo ao medir o erro como uma porcentagem do valor. É muito diferente quando medido em ordem de precisão. O valor 'x' é preciso para 10 × 10 −19 , enquanto o valor 'y' é preciso apenas para 10 × 10 −10 .

Agora faça o cálculo

x - y = 0.1234567891234567890 − 0.1234567890000000000

A resposta, com precisão de 20 dígitos significativos, é

0.0000000001234567890

No entanto, na máquina de ponto flutuante de 10 dígitos, o cálculo produz

0.1234567891 − 0.1234567890 = 0.0000000001

Em ambos os casos, o resultado é preciso na mesma ordem de magnitude das entradas (−20 e −10 respectivamente). No segundo caso, a resposta parece ter um dígito significativo, o que significaria perda de significância. No entanto, na aritmética de ponto flutuante de computador, todas as operações podem ser vistas como sendo realizadas em antilogaritmos , para os quais as regras para algarismos significativos indicam que o número de algarismos significativos permanece o mesmo que o menor número de algarismos significativos nas mantissas . A forma de indicar isso e representar a resposta a 10 algarismos significativos é

   1.000000000×10−10


Perda de bits significativos

Deixe que x e y ser números de ponto flutuante normalizados positivos.

Na subtração x - y , r bits significativos são perdidos onde

para alguns números inteiros positivos p e q .

Soluções Alternativas

É possível fazer cálculos usando uma representação fracionária exata de números racionais e manter todos os dígitos significativos, mas isso geralmente é proibitivamente mais lento do que a aritmética de ponto flutuante.

Uma das partes mais importantes da análise numérica é evitar ou minimizar a perda de significância nos cálculos. Se o problema subjacente for bem apresentado, deve haver um algoritmo estável para resolvê-lo.

Às vezes, truques de álgebra inteligentes podem transformar uma expressão em uma forma que contorna o problema. Um desses truques é usar a conhecida equação

Assim, com a expressão , multiplique o numerador e o denominador, fornecendo

Agora, a expressão pode ser reduzida para eliminar a subtração? Às vezes pode.

Por exemplo, a expressão pode sofrer perda de bits significativos se for muito menor que 1. Portanto, reescreva a expressão como

ou

Instabilidade da equação quadrática

Por exemplo, considere a equação quadrática

com as duas soluções exatas:

Esta fórmula nem sempre pode produzir um resultado preciso. Por exemplo, quando é muito pequeno, pode ocorrer perda de significância em qualquer um dos cálculos da raiz, dependendo do sinal de .

O caso , , servirá para ilustrar o problema:

Nós temos

Na aritmética real, as raízes são

Na aritmética de ponto flutuante de 10 dígitos:

Observe que a solução de maior magnitude tem precisão de dez dígitos, mas o primeiro dígito diferente de zero da solução de menor magnitude está errado.

Por causa da subtração que ocorre na equação quadrática, não constitui um algoritmo estável para calcular as duas raízes.

Um algoritmo melhor

Uma implementação de computador de ponto flutuante cuidadosa combina várias estratégias para produzir um resultado robusto. Assumindo que o discriminante b 2 - 4 ac é positivo, eb é diferente de zero, o cálculo seria o seguinte:

Aqui sgn denota a função de sinal , onde é 1 se for positivo e -1 se for negativo. Isso evita problemas de cancelamento entre e a raiz quadrada do discriminante, garantindo que apenas números do mesmo sinal sejam adicionados.

Para ilustrar a instabilidade da fórmula quadrática padrão em comparação com esta fórmula, considere uma equação quadrática com raízes e . Para 16 dígitos significativos, correspondendo aproximadamente à precisão de precisão dupla em um computador, a equação quadrática mônica com essas raízes pode ser escrita como

Usando a fórmula quadrática padrão e mantendo 16 dígitos significativos em cada etapa, a fórmula quadrática padrão produz

Observe como o cancelamento resultou no cálculo de apenas 8 dígitos significativos de precisão.

A fórmula variante apresentada aqui, no entanto, produz o seguinte:

Observe a retenção de todos os dígitos significativos para .

Observe que, embora a formulação acima evite o cancelamento catastrófico entre e , permanece uma forma de cancelamento entre os termos e do discriminante, que ainda pode levar à perda de até metade dos dígitos significativos corretos. O discriminante precisa ser calculado na aritmética de duas vezes a precisão do resultado para evitar isso (por exemplo, precisão de quad se o resultado final deve ser exato com precisão dupla total ). Isso pode ser na forma de uma operação fundida de multiplicação-adição .

Para ilustrar isso, considere a seguinte equação quadrática, adaptada de Kahan (2004):

Esta equação tem e raízes

No entanto, quando calculado usando aritmética de precisão dupla IEEE 754 correspondendo a 15 a 17 dígitos significativos de precisão, é arredondado para 0,0, e as raízes computadas são

que são ambos falsos após o 8º dígito significativo. Isso apesar do fato de que, superficialmente, o problema parece exigir apenas 11 dígitos significativos de precisão para sua solução.

Outros exemplos

  • A função expm1 calcula exponencial menos 1 . Para um x pequeno , exp ( x ) - 1 causará perda de significância na subtração; usar uma função especialmente projetada ajuda a resolver o problema.

Veja também

Referências