O uso do epsilon da máquina é apropriado para testes de igualdade de ponto flutuante?

Este é um acompanhamento paraTeste de igualdade de valor de ponto flutuante: existe um nome padrão para a constante "precisão"?.
Há uma pergunta muito semelhanteDouble.Epsilon para igualdade, maior que, menor que, menor que ou igual a, maior que ou igual a.

É sabido que um teste de igualdade para dois valores de ponto flutuantex ey deve parecer mais com isso (em vez de simples =):

abdômen(x - y ) <epsilon , Ondeepsilon é algum valor muito pequeno.

Como escolher um valor paraepsilon?

Obviamente, seria preferível escolherepsilon o menor valor possível, para obter a maior precisão possível para a verificação da igualdade.

Como exemplo, a estrutura .NET oferece uma constanteSystem.Double.Epsilon (= 4.94066 × 10-324), que representa o menor valor positivoSystem.Double valor maior que zero.

No entanto, verifica-se que esse valor específico não pode ser usado com segurança comoepsilon, Desde a:

0 +System.Double.Epsilon ≠ 0

1 +System.Double.Epsilon = 1 (!)

ou seja, se eu entendi direito, porque essa constante é menor queepsilon máquina.

→ Isso está correto?

→ Isso também significa que posso usar com segurançaepsilon: = máquina epsilon para testes de igualdade?

Removidas essas duas perguntas, pois elas já foram respondidas adequadamente pela segunda questão SO vinculada ao acima.

O artigo vinculado à Wikipedia diz que para números de ponto flutuante de 64 bits (ou seja, odouble digitar em vários idiomas), a máquina epsilon é igual a:

2-53Ou aprox. 0,000000000000000111 (um número com 15 zeros após o ponto decimal)

→ Daqui resulta que todos os valores de ponto flutuante de 64 bits têm precisão de 14 (se não 15) dígitos?

questionAnswers(4)

yourAnswerToTheQuestion