Це не буде вірно , якщо x
це NaN
, так як порівняння на NaN
це завжди помилково (так, навіть NaN == NaN
). У всіх інших випадках (нормальні значення, субнормальні значення, нескінченності, нулі) це твердження буде істинним.
Порада щодо уникнення ==
поплавків застосовується до обчислень через те, що номери з плаваючою точкою не можуть точно висловити багато результатів при використанні в арифметичних виразах. Присвоєння не є розрахунком, і немає причин, щоб призначення присвоювало інше значення, ніж оригінал.
Оцінка розширеної точності повинна бути проблемою, якщо дотримуватися стандарт. З <cfloat>
успадкованих від C [5.2.4.2.2.8] ( акцент моїх ):
За винятком присвоєння та передачі (які видаляють увесь додатковий діапазон та точність) , значення операцій з плаваючими операндами та значеннями, що підлягають звичайним арифметичним перетворенням, і плаваючих констант оцінюються у форматі, діапазон і точність якого можуть бути більшими, ніж вимагає тип.
Однак, як зазначалося в коментарях, деякі випадки з певними компіляторами, параметрами збірки та цілями можуть зробити це парадоксально помилковим.