Если FLT_HAS_SUBNORM равен 0, то должно ли преобразование (с плавающей запятой)1E-45 возвращать 0x1p-149?
Простой вопрос: если 0, то вернется ли преобразование?
Причина вопроса: ISO / IEC 9899:2011 (E) определяет поведение / только WRT операций с плавающей точкой . Согласно H.2.3.2 (операции с плавающей запятой) преобразование между точностями с плавающей запятой (термин, взятый из F.3 «Операторы и функции») не является операцией с плавающей запятой. Следовательно, поведение, указанное для
FLT_HAS_SUBNORM
/
DBL_HAS_SUBNORM
не имеет значения для преобразования точности с плавающей запятой . Отсюда вывод, что конверсия должна возвращать
0x1p-149
. Правильно ли это заключение?
UPD: Объяснение причин этих вопросов: в настоящее время у меня есть тесты, которые проверяют правильность результатов, генерируемых операциями FP (включая преобразования). Я запускаю эти тесты в средах с и с
FLT_HAS_SUBNORM is -1
. Основная проблема заключается в том, что при некоторых комбинациях параметров компилятора некоторые тесты не работают. Например: под
FLT_HAS_SUBNORM is 0
:
- HW (FPU) FP: возвращает
0x1p-149f
- SW (libfp) FP:
(float)1E-45
возвращается
Контрольное значение в тесте:
0.0f
.
Поэтому необходимо понимать, если:
- В тесте есть ошибка (написано неправильно: например, нет проверки на
HAS_SUBNORM
); или же - В компиляторе есть ошибка; или же
- SW (libfp) FP имеет ошибку; или же
- HW (FPU) FP имеет ошибку (ошибка в симуляторе; тоже бывает); или же
- Все возможные комбинации предыдущих случаев.
Первый шаг - прочитать стандарты (C / IEEE 754) и попытаться ответить на открытые вопросы. Однако оказывается, что многие аспекты FP явно не определены. Следовательно, каков наиболее рациональный способ справиться с ситуацией с существующими неудачными тестами?
Также обратите внимание, что в идеале тесты должны быть написаны независимо и «общим способом» (изучение функций системы / среды: проверка макросов функций, проверка пределов и т. Д.), То есть без знания конкретных деталей FP конкретного компилятора. используется для вычислений FP (или как люди называют это средой FP ).