Mi ingenua impresión es que uno siempre probaría la diferencia contra alguna tolerancia épsilon. ¿Me equivoco? ¿Puede probar la igualdad de las carrozas ser significativo en ciertos contextos?
No hay recetas únicas. En este artículo hay un tratamiento exhaustivo, donde puede encontrar una respuesta completa con código técnico y.
En resumen, hay principalmente 3 casos:
- comparando contra cero
- comparando con un no cero
- comparando dos números arbitrarios
Su idea de usar una comparación contra una tolerancia es buena para algunos casos, pero también hay una técnica basada en la Unidad en último lugar ( ULP ), descrita en el artículo.
Estoy implícitamente asumiendo que usar el operador de igualdad en flotadores es realmente significativo en algunos contextos; de lo contrario, ¿por qué la mayoría de los lenguajes de programación lo permiten?
Como anteriormente, hay situaciones en las que puede usarlo, pero tenga cuidado. Por ejemplo, el compilador gcc tiene una advertencia:
warning: comparing floating point with == or != is unsafe
Actualizar
Agrego algunas consideraciones sobre este argumento y tampoco están estrictamente relacionadas con el caso a == b
.
Igualdad con expresión
Considerando el caso:
a + b == c
a b c
a ⊕ bFl ( fl (a)+ fl (b))= = c= = fl (c)
∣∣∣unaa + b∣∣∣e r runa+ ∣∣∣sia + b∣∣∣e r rsi
e r rX= | x - fl ( x ) |El | X|
Entonces, en este caso, el uso de ==
es más delicado.
Portado en diferentes ambientes
Cuando portamos un código en diferentes entornos (máquina diferente) podemos obtener un resultado diferente (por ejemplo, tratar de pensar en una prueba unitaria). También en el caso el uso de ==
es delicado.