Para enteros, ==
hace justo lo que esperas. Si son iguales, son iguales.
Para carrozas, es otra historia. Las operaciones producen resultados imprecisos y se acumulan errores. Debes ser un poco confuso cuando se trata de números. Yo uso
if (std::abs(a - b)
< std::abs(a) * (std::numeric_limits<float_t>::epsilon() * error_margin))
donde float_t
es un typedef; esto me da la mayor precisión posible (suponiendo que el error_margin se calculó correctamente) y permite un ajuste fácil a otro tipo.
Además, algunos valores de punto flotante no son números: hay infinito, menos infinito y, por supuesto, no es un número. ==
hace cosas divertidas con aquellos. Infinito equivale a infinito, pero no un número no es igual a un no número.
¡Finalmente, hay cero positivo y negativo, que son distintos pero iguales el uno al otro! Para separarlos, debe hacer algo como verificar si el inverso es infinito positivo o negativo. (Solo asegúrese de que no obtendrá una excepción de división por cero).)
Por lo tanto, a menos que tenga una pregunta más específica, espero que lo maneja ...
para número entero == es suficiente – malay
Y el código con == es más limpio y más legible. – Igor
La segunda prueba es en realidad una prueba de desigualdad. – rlbond