C99 промежуточные результаты с плавающей точкой - PullRequest
0 голосов
/ 15 мая 2018

Согласно стандарту 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 ? То есть явные приведения и / или назначения типов не требуются для обеспечения заданной ширины?

...