Согласно стандарту C99:
6.3.1.8.2 : значения плавающих операндов и результатов плавающих выражений могут быть представлены с большей точностью и в диапазоне, чем это требуется для типа; типы не меняются. 52)>
Однако, вне области применения Приложения F, мы имеем:
5.2.4.2.2.7 : Значения операций с плавающими операндами и значения, подлежащие обычному арифметическому преобразованию, и плавающих констант оцениваются в формате, диапазон и точность которого могут быть больше, чем требуется для тип. Использование форматов оценки характеризуется значением, определенным реализацией FLT_EVAL_METHOD: 19)
Где FLT_EVAL_METHOD может быть:
- -1: неопределимо
- 0: оценить все операции и константы только для диапазона и
точность типа
- 1: оценить операции и константы
тип float и double для диапазона и точности типа double,
оценивать длинные двойные операции и константы для диапазона и
точность длинного двойного типа
- 2: оценить все операции
и константы дальности и точности длинного двойного типа.
Таким образом, для соответствующей реализации, FLT_EVAL_METHOD == [0, 1, 2] отменяет 6.3.1.8.2 ? То есть явные приведения и / или назначения типов не требуются для обеспечения заданной ширины?