Компиляция. Используя C ++, есть способ определить, являются ли нормализованные числа с плавающей запятой / двойными числами «нормализованными»; компилятором / системой?

Говоря прямо, мой вопрос точно такой, как указано в заголовке: в приложении, написанном с использованием C ++, есть ли способ определить, нормализуются ли поплавки / двойные денормалы компилятором / системой (например, через DAZ, FTZ, так далее)?

Если нужен контекст, то я пытаюсь программно определить минимальные значения типа float / double. Эти результаты, однако, зависят от того, являются ли денормали «нормализованы» или нет: если они есть, минимальные значения задаются числовыми пределами std min (), в противном случае — denorm_min ().

3

Решение

Вы должны просто доверять реализации, чтобы вернуться правильные значения для std::numeric_limits. Если std::numeric_limits<float>::has_denorm является std::denorm_present, тогда вы должны предположить, что обычные операторы C ++ не будут неявно нормализовать значения с плавающей точкой.

Обратите внимание, что это отдельный запрос от std::numeric_limits<float>::has_iec559, какие испытания для использования поплавков IEC-559 / IEEE-754. Таким образом, система может использовать поплавки IEEE-754, но не поддерживать денормализованные поплавки. Следовательно, реализации, которые всегда сбрасывают денормализованные числа с плавающей точкой в ​​ноль, должны возвращать std::denorm_absent за has_denorm,

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]