В случае FLT_HAS_SUBNORM == 0
(или любого XXX_HAS_SUBNORM == 0
в целом) выполнение макроса fpclassify
с вручную созданным субнормальным (построенным с использованием каламбура с помощью union
, использованием memcpy
, чтением из файла и т. Д.) Приводит к неопределенному поведению (UB) или приводит к хорошему- определенное поведение (WDB) возвращает FP_SUBNORMAL
(как и ожидалось)?
Примечания:
- Стандарт C довольно сдержан в отношении
FLT_HAS_SUBNORM is 0
случая. Все, что говорится оFLT_HAS_SUBNORM is 0
, это:
Характеристика как отсутствующая предназначена, если никакие операции с плавающей запятой не дают субнормальных результатов из ненормальных входных данных, даже если формат типа включает представления субнормальных чисел.
что можно интерпретировать как:
Если FLT_HAS_SUBNORM равен 0, то any_normal ‹op› any_normal никогда не дает субнормальных.
- Стандарт C, кажется, опускает явное определение поведения для следующего случая (сформулированного как вопрос):
В случае, если
FLT_HAS_SUBNORM is 0
: приводит ли выполнение какой-либо операции FP с входами, представленными вручную построенными субнормальными значениями (построенными с использованием прокалывания типов черезunion
, использованияmemcpy
, чтения из файла и т. Д.), К неопределенному поведению (UB)?
- Если явное определение поведения опущено, то согласно стандарту C:
… Неопределенное поведение иначе обозначается в этом документе… отсутствием какого-либо явного определения поведения…
FLT_HAS_SUBNORM
имеет 3 определенных значения: -1, 0, 1. Вопрос в том, равно ли оно нулю. - person chux - Reinstate Monica   schedule 03.02.2021FLT_HAS_SUBNORM == 0
, относится ли вопрос к подмножеству реализаций, которые действительно включают представления субнормальных чисел, а созданное вручную является допустимым? - person chux - Reinstate Monica   schedule 03.02.2021fpclassify
, вызываемый с этимvalid one
в качестве ввода, вести к WDB (возвращаяFP_SUBNORMAL
, как ожидалось) или к UB? Другими словами: еслиFLT_HAS_SUBNORM == 0
и если реализации действительно включают представления субнормальных чисел, то сколько стандартных функций FP, вызываемых с вручную построенными субнормальными числами, приводят к UB? Все или некоторые? Какие именно должны привести к UB / WDB? - person pmor   schedule 08.02.2021If subnormal numbers are not supported, then they are not supported regardless of how they are obtained, whether by literals in source code, arithmetic, or manipulation of the bits that represent floating-point objects.
. - person pmor   schedule 08.02.2021FLT_HAS_SUBNORM is 0
ведет к FTZ, а не к DAZ, верно? - person pmor   schedule 08.03.2021FLT_HAS_SUBNORM == 0
, то передача субнормальных входных данных операциям с плавающей запятой недопустима? Если да, значит ли это, что еслиFLT_HAS_SUBNORM == 0
, то передача субнормального ввода вfpclassify()
также недопустима? - person pmor   schedule 08.03.2021