Если наличие субнормальных чисел не является обязательным (HAS_SUBNORM), то почему наличие FP_SUBNORMAL обязательно?
Если наличие субнормальных чисел необязательно (макросы функций), то почему наличие макроса классификации обязательно?
Причина вопроса: в этом (до сих пор не ответившем) вопросе был сделан вывод / выдвинута гипотеза, что:
В случае, если HAS_SUBNORM равен 0, выполнение любой операции FP с входными данными, представленными вручную построенными субнормальными числами (построенными с использованием прокалывания типов через объединение, использования memcpy, чтения из файла и т.д.), приводит к неопределенному поведению (UB)
Этот вывод / гипотеза приводит к нескольким вопросам:
- Означает ли это, что в случае использования стандартной библиотеки C невозможно даже обнаружить наличие субнормальных чисел, предоставленных, например, пользователем?
Пример:
float value = get_value(); // user input
#if FLT_HAS_SUBNORM == 0
int class = fpclassify( value ); // leads to UB if value is subnormal number
if ( class == FP_SUBNORMAL )
{
error( "subnormal numbers are not supported" );
}
#endif
- Если наличие зависит от дизъюнкции
HAS_SUBNORM
макрос установлен на1
? Т.е.:
#if FLT_HAS_SUBNORM == 1 || DBL_HAS_SUBNORM == 1 || LDBL_HAS_SUBNORM == 1
// FP_SUBNORMAL is present
#else
// FP_SUBNORMAL is absent
#endif
- Тот факт, что
FP_SUBNORMAL
макрос классификации обязательно означает, что в случаеHAS_SUBNORM is 0
выполнениеfpclassify
макрос с входными данными, представленными вручную построенными субнормальными числами, приведет к четко определенному поведению?