numeric_limits Шаблонный класс предоставляет программу на C ++ с информацией о различных свойствах репрезентации реализации языка арифметических типов.
namespace std { template<class T> class numeric_limits { public: static constexpr bool is_specialized = false; static constexpr T min() noexcept { return T(); } static constexpr T max() noexcept { return T(); } static constexpr T lowest() noexcept { return T(); } static constexpr int digits = 0; static constexpr int digits10 = 0; static constexpr int max_digits10 = 0; static constexpr bool is_signed = false; static constexpr bool is_integer = false; static constexpr bool is_exact = false; static constexpr int radix = 0; static constexpr T epsilon() noexcept { return T(); } static constexpr T round_error() noexcept { return T(); } static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr T infinity() noexcept { return T(); } static constexpr T quiet_NaN() noexcept { return T(); } static constexpr T signaling_NaN() noexcept { return T(); } static constexpr T denorm_min() noexcept { return T(); } static constexpr bool is_iec559 = false; static constexpr bool is_bounded = false; static constexpr bool is_modulo = false; static constexpr bool traps = false; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; }; template<class T> class numeric_limits<const T>; template<class T> class numeric_limits<volatile T>; template<class T> class numeric_limits<const volatile T>; }
Для всех членов, объявленных staticconstexpr в numeric_limits шаблоне, специализации должны определять эти значения таким образом, чтобы их можно было использовать как постоянные выражения.
Спецификации должны быть предоставлены для каждого арифметического типа, включая числа с плавающей запятой и целые числа bool. Член is_specialized должен быть true для всех таких специальностей numeric_limits.
Значение каждого члена специализации numeric_limits неквалифицированного типа cv T должно быть равно значению соответствующего члена специализации неквалифицированного типаT.
static constexpr T min() noexcept;
Для типов с плавающей запятой с субнормальными числами возвращает минимальное положительное нормализованное значение.
Имеет значение для всех специализаций, в которых is_bounded != false, или is_bounded == false && is_signed == false.
static constexpr T max() noexcept;
static constexpr T lowest() noexcept;
static constexpr int digits;
static constexpr int digits10;
static constexpr int max_digits10;
Количество десятичных разрядов, необходимое для того, чтобы всегда различать различающиеся значения.
static constexpr bool is_signed;
static constexpr bool is_integer;
static constexpr bool is_exact;
true если тип использует точное представление. Все целочисленные типы являются точными, но не все точные типы являются целыми числами. Например, рациональные представления и представления с фиксированным показателем являются точными, но не целочисленными.
static constexpr int radix;
static constexpr T epsilon() noexcept;
static constexpr T round_error() noexcept;
static constexpr int min_exponent;
static constexpr int min_exponent10;
static constexpr int max_exponent;
static constexpr int max_exponent10;
static constexpr bool has_infinity;
static constexpr bool has_quiet_NaN;
static constexpr bool has_signaling_NaN;
static constexpr float_denorm_style has_denorm;
static constexpr bool has_denorm_loss;
static constexpr T infinity() noexcept;
Имеет значение для всех специализаций, для которых has_infinity != false. Обязателен в специализациях, для которых is_iec559 != false.
static constexpr T quiet_NaN() noexcept;
Имеет значение для всех специализаций, для которых has_quiet_NaN != false. Обязателен в специализациях, для которых is_iec559 != false.
static constexpr T signaling_NaN() noexcept;
Имеет значение для всех специализаций, для которых has_signaling_NaN != false. Обязателен в специализациях, для которых is_iec559 != false.
static constexpr T denorm_min() noexcept;
В специализациях, для которых has_denorm == falseвозвращает минимальное положительное нормализованное значение.
static constexpr bool is_iec559;
static constexpr bool is_bounded;
true если набор значений, представимых типом, конечно.210 [ Note: Все фундаментальные типы ([basic.fundamental]) ограничены. Этот член предназначенfalse для типов произвольной точности. ] — end note
static constexpr bool is_modulo;
[ Example: is_modulo предназначенfalse для целочисленных типов со знаком ([basic.fundamental]), если реализация, как расширение этого международного стандарта, не определяет целочисленное переполнение со знаком для переноса. ] — end example
static constexpr bool traps;
static constexpr bool tinyness_before;
static constexpr float_round_style round_style;
Имеет значение для всех типов с плавающей запятой. Должны возвращаться специализации для целочисленных типов round_toward_zero.
ЭквивалентCHAR_MIN,SHRT_MIN, FLT_MIN,DBL_MINи т.д.
ЭквивалентCHAR_MAX,SHRT_MAX, FLT_MAX,DBL_MAXи т.д.
lowest() необходимо, потому что не все представления с плавающей запятой имеют наименьшее (наиболее отрицательное) значение, которое является отрицательным из наибольшего (наиболее положительного) конечного значения.
ЭквивалентFLT_MANT_DIG,DBL_MANT_DIG, LDBL_MANT_DIG.
ЭквивалентFLT_DIG,DBL_DIG, LDBL_DIG.
ЭквивалентноFLT_RADIX.
Различает типы с основанием, отличным от 2 (например, BCD).
ЭквивалентFLT_EPSILON,DBL_EPSILON,LDBL_EPSILON.
Ошибка округления описана в разделе 5.2.4 LIA-1 и разделе C.5.2.4 «Обоснование» приложения C. - Округление и константы округления.
ЭквивалентFLT_MIN_EXP,DBL_MIN_EXP, LDBL_MIN_EXP.
Эквивалент FLT_MIN_10_EXP,DBL_MIN_10_EXP,LDBL_MIN_10_EXP.
ЭквивалентFLT_MAX_EXP, DBL_MAX_EXP,LDBL_MAX_EXP.
Эквивалент FLT_MAX_10_EXP,DBL_MAX_10_EXP,LDBL_MAX_10_EXP.
Требуется LIA-1.
Требуется LIA-1.
Требуется LIA-1.
См. ISO / IEC / IEEE 60559.
Требуется LIA-1.
Требуется LIA-1.
Требуется LIA-1.
Требуется LIA-1.
ISO / IEC / IEEE 60559: 2011 совпадает с IEEE 754-2008.
Требуется LIA-1.
Требуется LIA-1.
Требуется LIA-1.
См. ISO / IEC / IEEE 60559. Требуется LIA-1.
ЭквивалентноFLT_ROUNDS. Требуется LIA-1.
Предусмотрены все участники для всех специальностей. Однако многие значения должны быть значимыми только при определенных условиях (например, epsilon() имеет смысл только в том случае, если is_integer есть false). Любое значение, которое не является «значимым», должно быть установлено на 0 или false.
[ Example:
namespace std { template<> class numeric_limits<float> { public: static constexpr bool is_specialized = true; static constexpr float min() noexcept { return 1.17549435E-38F; } static constexpr float max() noexcept { return 3.40282347E+38F; } static constexpr float lowest() noexcept { return -3.40282347E+38F; } static constexpr int digits = 24; static constexpr int digits10 = 6; static constexpr int max_digits10 = 9; static constexpr bool is_signed = true; static constexpr bool is_integer = false; static constexpr bool is_exact = false; static constexpr int radix = 2; static constexpr float epsilon() noexcept { return 1.19209290E-07F; } static constexpr float round_error() noexcept { return 0.5F; } static constexpr int min_exponent = -125; static constexpr int min_exponent10 = - 37; static constexpr int max_exponent = +128; static constexpr int max_exponent10 = + 38; static constexpr bool has_infinity = true; static constexpr bool has_quiet_NaN = true; static constexpr bool has_signaling_NaN = true; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr float infinity() noexcept { return value; } static constexpr float quiet_NaN() noexcept { return value; } static constexpr float signaling_NaN() noexcept { return value; } static constexpr float denorm_min() noexcept { return min(); } static constexpr bool is_iec559 = true; static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = true; static constexpr bool tinyness_before = true; static constexpr float_round_style round_style = round_to_nearest; }; }
— end example ]
Специализация bool предоставляется следующим образом:
namespace std { template<> class numeric_limits<bool> { public: static constexpr bool is_specialized = true; static constexpr bool min() noexcept { return false; } static constexpr bool max() noexcept { return true; } static constexpr bool lowest() noexcept { return false; } static constexpr int digits = 1; static constexpr int digits10 = 0; static constexpr int max_digits10 = 0; static constexpr bool is_signed = false; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int radix = 2; static constexpr bool epsilon() noexcept { return 0; } static constexpr bool round_error() noexcept { return 0; } static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr bool infinity() noexcept { return 0; } static constexpr bool quiet_NaN() noexcept { return 0; } static constexpr bool signaling_NaN() noexcept { return 0; } static constexpr bool denorm_min() noexcept { return 0; } static constexpr bool is_iec559 = false; static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = false; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; }; }