Não será verdade se x
for NaN
, pois as comparações sempreNaN
são falsas (sim, até NaN == NaN
). Para todos os outros casos (valores normais, valores subnormais, infinitos, zeros), essa afirmação será verdadeira.
O conselho para evitar ==
flutuações se aplica aos cálculos devido ao fato de os números de ponto flutuante serem incapazes de expressar muitos resultados exatamente quando usados em expressões aritméticas. A atribuição não é um cálculo e não há razão para que a atribuição produza um valor diferente do original.
A avaliação de precisão estendida deve ser um problema, se o padrão for seguido. De <cfloat>
herdado de C [5.2.4.2.2.8] ( ênfase minha ):
Exceto pela atribuição e conversão (que removem toda a faixa e precisão extras) , os valores de operações com operandos flutuantes e sujeitos às conversões aritméticas usuais e de constantes flutuantes são avaliados para um formato cujo alcance e precisão podem ser maiores do que o exigido pelo tipo.
No entanto, como os comentários apontaram, alguns casos com certos compiladores, opções de construção e destinos podem tornar isso paradoxalmente falso.