Sé que no podemos comparar 2 valores de coma flotante con ==. Solo podemos comparar que están dentro de algún intervalo el uno del otro. Sé¿Se pueden comparar valores de punto flotante exactamente a cero?
if(val == 0.512)
es incorrecto debido a errores inherentes a los cálculos de punto flotante y la conversión a binario y debería ser
if (val in (0.512-epsilon, 0.512+epsilon))
Pero es 0 especial? ¿Podemos comparar flotadores exactamente a 0? O incluso eso es incorrecto? Particularmente en el contexto de C# y Java?
double val = 0;
val = getVal();
if(val == 0)
pedantería matemática: es epsilon, no ephsilon. buena pregunta, sin embargo. – Carl
Por supuesto, puede comparar dos valores de coma flotante usando la igualdad exacta. Para ciertos propósitos restringidos, no es lo que quieres hacer, pero decir que "no puedes" hacerlo es una tontería, pura y simple, y evita que los desarrolladores aprendan acerca de la semántica real del punto flotante. –
@Carl: ¡Gracias por la pedantería griega! editó la publicación. Estoy tan acostumbrado a escribir (U + 0395) ε, ¡no sabía la ortografía exacta! – Fakrudeen