No será cierto si x
es así NaN
, ya que las comparaciones NaN
son siempre falsas (sí, incluso NaN == NaN
). Para todos los demás casos (valores normales, valores subnormales, infinitos, ceros) esta afirmación será verdadera.
El consejo para evitar los ==
flotantes se aplica a los cálculos debido a que los números de coma flotante no pueden expresar muchos resultados exactamente cuando se usan en expresiones aritméticas. La asignación no es un cálculo y no hay razón para que la asignación arroje un valor diferente al original.
La evaluación de precisión extendida no debería ser un problema si se sigue el estándar. De <cfloat>
heredado de C [5.2.4.2.2.8] ( énfasis mío ):
A excepción de la asignación y la conversión (que eliminan todo el rango y la precisión adicionales) , los valores de las operaciones con operandos flotantes y valores sujetos a las conversiones aritméticas habituales y las constantes flotantes se evalúan en un formato cuyo rango y precisión pueden ser mayores que los requeridos por tipo.
Sin embargo, como los comentarios han señalado, algunos casos con ciertos compiladores, opciones de compilación y objetivos podrían hacer que esto sea paradójicamente falso.