Namespaces
Variants

HUGE_VALF, HUGE_VAL, HUGE_VALL

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
HUGE_VALF HUGE_VAL HUGE_VALL
(C++11) (C++11)
(C++11)
(C++11)
Определено в заголовке <cmath>
#define HUGE_VALF /* implementation defined */
(начиная с C++11)
#define HUGE_VAL  /* implementation defined */
#define HUGE_VALL /* implementation defined */
(начиная с C++11)

Макросы HUGE_VALF , HUGE_VAL и HUGE_VALL раскрываются в положительные константные выражения с плавающей точкой, которые сравниваются равными со значениями, возвращаемыми функциями и операторами с плавающей точкой в случае переполнения (см. math_errhandling ).

Константа Описание
HUGE_VALF Раскрывается в положительное float выражение, указывающее на переполнение
HUGE_VAL Раскрывается в положительное double выражение, указывающее на переполнение, не обязательно представимое как float
HUGE_VALL Раскрывается в положительное long double выражение, указывающее на переполнение, не обязательно представимое как float или double

В реализациях, поддерживающих бесконечности с плавающей точкой, эти макросы всегда раскрываются в положительные бесконечности типов float , double и long double соответственно.

Примечания

В реализациях, которые не поддерживают бесконечности с плавающей точкой, эти макросы раскрываются в максимальное конечное число соответствующих типов.

C++98 добавил float и long double перегрузки математических функций. Существует проблема, что float перегрузки не могут возвращать HUGE_VAL для указания переполнения, поскольку эта макроконстанта не гарантированно представима как float .

LWG issue 357 был поднят для решения этой проблемы. LWG обнаружило, что C99 имеет ту же проблему ( float и long double перегрузки также были добавлены в C99), и C99 ввел новые макросы HUGE_VALF и HUGE_VALL для решения проблемы. Поэтому вопрос был закрыт, и решение из C99 было принято в C++11.

Смотрите также

(C++11)
вычисляется в положительную бесконечность или значение, гарантированно вызывающее переполнение float
(макроконстанта)