Это не будет верно, если x
равно NaN
, поскольку сравнения по NaN
равны всегда ложно (да, даже NaN == NaN
). Для всех остальных случаев (нормальные значения, субнормальные значения, бесконечности, нули) это утверждение будет верным.
Рекомендация по избежанию ==
для чисел с плавающей запятой применима к вычислениям из-за чисел с плавающей запятой будучи не в состоянии express получить много результатов точно при использовании в арифметических c выражениях. Присвоение не является расчетом, и нет никаких причин, по которым присваивание могло бы дать значение, отличное от исходного.
Оценка расширенной точности не должна быть проблемой, если следовать стандарту. От <cfloat>
унаследовано от C [5.2.4.2.2.8] ( упорная мина ):
За исключением назначения и приведения (которые удаляют весь дополнительный диапазон и точность) , значения операций с плавающими операндами и значения, подлежащие обычным арифметическим преобразованиям c и плавающих констант, оцениваются в формате, диапазон и точность которого могут быть больше, чем требуется для типа.
Однако, как отмечалось в комментариях, некоторые случаи с определенными компиляторами, опциями компоновки и целями могут сделать это парадоксально ложным.