Agora estou comparando carros alegóricos em Java e a fórmula mais simples é:
Math.abs(a - b) < THRESHOLD
Ao nomear sua variável para o limiar da diferença, você deve nomear delta ou epsilon ? Especificamente, qual dos dois é o termo correto para o menor valor que um número de ponto flutuante pode representar?
O termo linguagem de programação é específico ou é universal entre as línguas?
Respostas:
Epsilon em matemática e engenharia
Em matemática e engenharia em geral:
e epsilon parece mais apropriado no seu caso.
Epsilon em ciência da computação
Em ciência da computação, em particular, o termo epsilon também se refere a máquina espilon, que mede a diferença entre
1.0f
e o menor flutuador que é estritamente maior que1.0f
. Esse último número é1.00000011920928955078125f
para carros alegóricos em Java e pode ser calculado com:A definição de máquina epsilon é consistente com o uso geral do epsilon descrito acima.
Comparando carros alegóricos
Observe, no entanto, que, antes de comparar as flutuações para "proximidade", você precisa ter uma idéia da escala delas. Dois flutuadores muito grandes e supostamente muito diferentes podem ser iguais:
E, inversamente, pode haver muitos valores possíveis de flutuação (e várias ordens de grandeza) entre duas pequenas flutuações que diferem pelo epsilon da máquina "apenas". No exemplo abaixo, existem 10.000.000 valores de flutuação disponíveis entre
small
ef
, mas sua diferença ainda está bem abaixo do epsilon da máquina:O artigo vinculado na resposta da GlenH7 investiga ainda mais a comparação de flutuadores e propõe várias soluções para superar esses problemas.
fonte
Em matemática, delta é usado para representar alguma diferença em relação a um valor, epsilon é usado para representar um valor de erro arbitrário. Nesse caso, epsilon seria o nome convencional.
fonte
Para responder diretamente sua pergunta, você quer usar o termo
epsilon
. Mais precisamente, émachine epsilon
mas o uso comum descarta "máquina" e apenas usaepsilon
.Olhando em minha cópia local,
float.h
vejo:E os comentários associados deixam claro que épsilon é o termo a que você está se referindo.
Mas também podemos confiar em outras referências externas para verificar se esse
epsilon
é o termo correto. Veja aqui , aqui , aqui e, finalmente, essa combinação de tags de consulta SO . Não consegui encontrar uma referência direta ao padrão IEEE 754 para citar.Você não perguntou, mas achei esta referência muito relevante para o exemplo que você forneceu para esclarecer sua pergunta.
Dê uma olhada neste artigo de blog de Bruce Dawson, da Valve, sobre a comparação de valores de ponto flutuante para obter algumas dicas sobre por que você não deseja usar a comparação sugerida.
Há bastante informação nesse artigo, mas este é o snipppet mais relevante de lá:
Dawson aborda várias outras considerações sobre os meandros envolvidos na comparação de carros alegóricos e no tratamento de valores muito pequenos como esse, portanto, incentivaria sua leitura no restante do post.
fonte
simplest formula
para comparação. Muitos usam essa abordagem como primeira tentativa, e eu incluí o artigo de Dawson, porque ele realmente entra nas nuances de quão complicada é a comparação. Então, tentei responder diretamente à pergunta e apontei por que não usá-la dessa maneira.Esta é uma função de erro; erro absoluto é geralmente chamado ε (epsilon) ou Δ x para alguma quantidade x:
Às vezes, o erro relativo é chamado η (eta):
Para fins de programação,
absoluteError
erelativeError
(ou algumas abreviações) são mais descritivos. Se você deseja afirmar que o erro é menor que um determinado valor, esse valor seria simplesmente chamado de limite ou tolerância .Vejo:
Erro absoluto no Wolfram MathWorld
Erro de aproximação na Wikipedia
fonte
Eu chamaria isso de "tolerância".
Talvez esse não seja o termo matematicamente correto, mas o simples fato de você fazer a pergunta implica para mim que nem "delta" nem "epsilon" seriam um bom nome de variável a ser usado.
Na minha experiência, é melhor usar nomes de identificadores que façam sentido para quem realmente lerá o código. De que vale um nome perfeitamente correto se significa que o leitor precisa procurá-lo na Wikipedia para entender o que significa?
fonte