Если наличие субнормальных чисел не является обязательным (HAS_SUBNORM), то почему наличие FP_SUBNORMAL обязательно?

Если наличие субнормальных чисел необязательно (макросы функций), то почему наличие макроса классификации обязательно?

Причина вопроса: в этом (до сих пор не ответившем) вопросе был сделан вывод / выдвинута гипотеза, что:

В случае, если HAS_SUBNORM равен 0, выполнение любой операции FP с входными данными, представленными вручную построенными субнормальными числами (построенными с использованием прокалывания типов через объединение, использования memcpy, чтения из файла и т.д.), приводит к неопределенному поведению (UB)

Этот вывод / гипотеза приводит к нескольким вопросам:

  1. Означает ли это, что в случае использования стандартной библиотеки 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
  1. Если наличие зависит от дизъюнкции 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
  1. Тот факт, что FP_SUBNORMAL макрос классификации обязательно означает, что в случае HAS_SUBNORM is 0 выполнение fpclassify макрос с входными данными, представленными вручную построенными субнормальными числами, приведет к четко определенному поведению?

0 ответов

Другие вопросы по тегам