Да, это гарантировано.
§6.2.5 (Типы) пункт 10:
Существует три реальных плавающих типа, обозначенных как float , double и long double . Набор значений типа float является подмножеством набора значений типа double …
§6.3.1.5 ( Преобразования вещественных плавающих типов) пункт 1:
- Когда значение реального плавающего типа преобразуется в реальный плавающий тип, если преобразуемое значение может быть точно представлено в новом типе, оно не изменяется.
Поскольку значения float
являются подмножеством значений double
, значение float
может быть представлено в точности как double
так что без изменений. Таким образом, результирующее double
имеет точное представление float
, поэтому оно будет преобразовано обратно без изменений.
Как уже было отмечено, тот факт, что значение не изменилось, не означает, что оно будет сравниваться равным, поскольку оно может быть NaN. Но оба или ни один не будет NaN.