参阅 std::numeric_limits 接口
定义于头文件 | |
PTRDIFF_MIN (C++11) | std::ptrdiff_t 类型对象的最小值 (宏常量) |
PTRDIFF_MAX (C++11) | std::ptrdiff_t 类型对象的最大值 (宏常量) |
SIZE_MAX (C++11) | std::size_t 类型对象的最大值 (宏常量) |
SIG_ATOMIC_MIN (C++11) | std::sig_atomic_t 类型对象的最小值 (宏常量) |
SIG_ATOMIC_MAX (C++11) | std::sig_atomic_t 类型对象的最大值 (宏常量) |
WCHAR_MIN (C++11) | wchar_t 类型对象的最小值 (宏常量) |
WCHAR_MAX (C++11) | wchar_t 类型对象的最大值 (宏常量) |
WINT_MIN (C++11) | std::wint_t 类型对象的最小值 (宏常量) |
WINT_MAX (C++11) | std::wint_t 类型对象的最大值 (宏常量) |
定义于头文件 | |
CHAR_BIT | 字节的位数 (宏常量) |
MB_LEN_MAX | 多字节字符的最大字节数 (宏常量) |
CHAR_MIN | char 的最小值 (宏常量) |
CHAR_MAX | char 的最大值 (宏常量) |
SCHAR_MINSHRT_MININT_MINLONG_MINLLONG_MIN (C++11) | 分别为 signed char、short、int、long 及 long long 的最小值 (宏常量) |
SCHAR_MAXSHRT_MAXINT_MAXLONG_MAXLLONG_MAX (C++11) | 分别为 signed char、short、int、long 及 long long 的最大值 (宏常量) |
UCHAR_MAXUSHRT_MAXUINT_MAXULONG_MAXULLONG_MAX (C++11) | 分别为 unsigned char、unsigned short、unsigned int、 unsigned long 及 unsigned long long 的最大值 (宏常量) |
注意:这些常量,除了 CHAR_BIT
和 MB_LEN_MAX
,都要求其类型匹配整数提升的结果,一如应用于它们所描述的类型的对象: CHAR_MAX
可能拥有类型 int 或 unsigned int ,但决非 char 。同样地 USHRT_MAX
可能不拥有无符号类型:其类型可能是 int 。
定义于头文件 | |
FLT_RADIX | 所有三种浮点类型的表示所用的基数(整数底) (宏常量) |
DECIMAL_DIG (C++11) | 从 long double 转换到至少有 DECIMAL_DIG 位数字的十进制表示,再转换回 long double 为恒等转换:这是序列化/反序列化 long double 所要求的十进制精度(参阅 std::numeric_limits::max_digits10)(宏常量) |
FLT_DECIMAL_DIGDBL_DECIMAL_DIGLDBL_DECIMAL_DIG (C++17) | 从 float/double/long double 转换到至少有 FLT_DECIMAL_DIG /DBL_DECIMAL_DIG /LDBL_DECIMAL_DIG 位数字的十进制,再转换回原类型为恒等转换:这是序列化/反序列化浮点值所要求的十进制精度(参阅 std::numeric_limits::max_digits10)。分别定义为至少 6、10 和 10,对于 IEEE float 为 9,对于 IEEE double 为 17。(宏常量) |
FLT_MINDBL_MINLDBL_MIN | 分别为 float、double 与 long double 的最小规格化正数值 (宏常量) |
FLT_TRUE_MINDBL_TRUE_MINLDBL_TRUE_MIN (C++17) | 分别为 float、double 与 long double 的最小正数值 (宏常量) |
FLT_MAXDBL_MAXLDBL_MAX | 分别为 float、double 与 long double 的最大值 (宏常量) |
FLT_EPSILONDBL_EPSILONLDBL_EPSILON | 分别为 1.0 和 float、double 及 long double 的下一个可表示值之差 (宏常量) |
FLT_DIGDBL_DIGLDBL_DIG | 保证能在文本→ float/double/long double →文本的往返转换中保留而不会因舍入或溢出发生改变的的十进制位数(解释参阅 std::numeric_limits::digits10) (宏常量) |
FLT_MANT_DIGDBL_MANT_DIGLDBL_MANT_DIG | 分别为能无精度损失地表示成 float、double 及 long double 的基数 FLT_RADIX 的数字位数(宏常量) |
FLT_MIN_EXPDBL_MIN_EXPLDBL_MIN_EXP | 分别为能够使FLT_RADIX 的该整数减一次幂为规格化的 float、double 与 long double 的最小负整数(宏常量) |
FLT_MIN_10_EXPDBL_MIN_10_EXPLDBL_MIN_10_EXP | 分别为能够使 10 的该整数减一次幂为规格化的 float、double 与 long double 的最小负整数 (宏常量) |
FLT_MAX_EXPDBL_MAX_EXPLDBL_MAX_EXP | 分别为能够使 FLT_RADIX 的该整数减一次幂为可表示的有限的 float、double 与 long double 的最大正整数(宏常量) |
FLT_MAX_10_EXPDBL_MAX_10_EXPLDBL_MAX_10_EXP | 分别为能够使 10 的该整数减一次幂为可表示的有限的 float、double 与 long double 的最大正整数 (宏常量) |
FLT_ROUNDS | 浮点算术的默认舍入模式 (宏常量) |
FLT_EVAL_METHOD (C++11) | 指定进行所有算术运算所用的精度 (宏常量) |
FLT_HAS_SUBNORMDBL_HAS_SUBNORMLDBL_HAS_SUBNORM (C++17) | 指明类型是否支持非正规数值:-1 为不确定,0 为不支持,1 为支持。 (宏常量) |
- #include
.h> - #include
.h> - #include
.h> - #include <float.h>
-
- int main()
- {
- //std::ptrdiff_t 类型对象的最小值
- printf("PTRDIFF_MIN: %d\n", PTRDIFF_MIN);
- //std::ptrdiff_t 类型对象的最大值
- printf("PTRDIFF_MAX: %d\n", PTRDIFF_MAX);
- //std::size_t 类型对象的最大值
- printf("SIZE_MAX: %d\n", SIZE_MAX);
- //std::sig_atomic_t 类型对象的最小值
- printf("SIG_ATOMIC_MIN: %d\n", SIG_ATOMIC_MIN);
- //std::sig_atomic_t 类型对象的最大值
- printf("SIG_ATOMIC_MAX: %d\n", SIG_ATOMIC_MAX);
- //wchar_t 类型对象的最小值
- printf("WCHAR_MIN: %d\n", WCHAR_MIN);
- //wchar_t 类型对象的最大值
- printf("WCHAR_MAX: %d\n", WCHAR_MAX);
- //std::wint_t 类型对象的最小值
- printf("WINT_MIN: %d\n", WINT_MIN);
- //std::wint_t 类型对象的最大值
- printf("WINT_MAX: %d\n", WINT_MAX);
- printf("\n");
-
- //整数类型极限
- //字节的位数
- printf("CHAR_BIT: %d\n", CHAR_BIT);
- //多字节字符的最大字节数
- printf("MB_LEN_MAX: %d\n", MB_LEN_MAX);
- //char 的最小值
- printf("CHAR_MIN: %d\n", CHAR_MIN);
- //char 的最大值
- printf("CHAR_MAX: %d\n", CHAR_MAX);
- printf("\n");
-
- //分别为 signed char、short、int、long 及 long long 的最小值
- printf("SCHAR_MIN: %d\n", SCHAR_MIN);
- printf("SHRT_MIN: %d\n", SHRT_MIN);
- printf("INT_MIN: %d\n", INT_MIN);
- printf("LONG_MIN: %I32d\n", LONG_MIN);
- printf("LLONG_MIN: %I64d\n", LLONG_MIN);
- printf("\n");
-
- //分别为 signed char、short、int、long 及 long long 的最大值
- printf("SCHAR_MAX: %d\n", SCHAR_MAX);
- printf("SHRT_MAX: %d\n", SHRT_MAX);
- printf("INT_MAX: %d\n", INT_MAX);
- printf("LONG_MAX: %I32d\n", LONG_MAX);
- printf("LLONG_MAX: %I64d\n", LLONG_MAX);
- printf("\n");
-
- //分别为 unsigned char、unsigned short、unsigned int、
- //unsigned long 及 unsigned long long 的最大值
- printf("UCHAR_MAX: %d\n", UCHAR_MAX);
- printf("USHRT_MAX: %d\n", USHRT_MAX);
- printf("UINT_MAX: %d\n", UINT_MAX);
- printf("ULONG_MAX: %I32u\n", ULONG_MAX);
- printf("ULLONG_MAX: %I64u\n", ULLONG_MAX);
- printf("\n");
-
- //浮点类型极限
- //所有三种浮点类型的表示所用的基数(整数底)
- printf("FLT_RADIX: %d\n", FLT_RADIX);
- //从 long double 转换到至少有 DECIMAL_DIG 位数字的十进制表示,
- //再转换回 long double 为恒等转换:这是序列化/反序列化 long double 所要求的十进制精度
- //(参阅 std::numeric_limits::max_digits10)
- printf("DECIMAL_DIG: %d\n", DECIMAL_DIG);
- printf("FLT_DECIMAL_DIG:%d\n", FLT_DECIMAL_DIG);
- printf("DBL_DECIMAL_DIG:%d\n", DBL_DECIMAL_DIG);
- printf("LDBL_DECIMAL_DIG:%d\n", LDBL_DECIMAL_DIG);
- printf("\n");
-
- //分别为 float、double 与 long double 的最小规格化正数值
- printf("FLT_MIN: %f\n", FLT_MIN);
- printf("DBL_MIN: %f\n", DBL_MIN);
- printf("LDBL_MIN: %lf\n", LDBL_MIN);
- printf("\n");
-
- //分别为 float、double 与 long double 的最小正数值
- printf("FLT_TRUE_MIN: %f\n", FLT_TRUE_MIN);
- printf("DBL_TRUE_MIN: %f\n", DBL_TRUE_MIN);
- printf("LDBL_TRUE_MIN: %lf\n", LDBL_TRUE_MIN);
- printf("\n");
-
- //分别为 float、double 与 long double 的最大值
- printf("FLT_MAX: %f\n", FLT_MAX);
- printf("DBL_MAX: %f\n", DBL_MAX);
- printf("LDBL_MAX: %lf\n", LDBL_MAX);
- printf("\n");
-
- //分别为 1.0 和 float、double 及 long double 的下一个可表示值之差
- printf("FLT_EPSILON: %f\n", FLT_EPSILON);
- printf("DBL_EPSILON: %f\n", DBL_EPSILON);
- printf("LDBL_EPSILON: %lf\n", LDBL_EPSILON);
- printf("\n");
-
- //保证能在文本→ float/double/long double →文本的往返转换中保留而不会
- //因舍入或溢出发生改变的的十进制位数(解释参阅 std::numeric_limits::digits10)
- printf("FLT_DIG: %d\n", FLT_DIG);
- printf("DBL_DIG: %d\n", DBL_DIG);
- printf("LDBL_DIG: %d\n", LDBL_DIG);
- printf("\n");
-
- //分别为能无精度损失地表示成 float、double 及 long double 的基数 FLT_RADIX 的数字位数
- printf("FLT_MANT_DIG: %d\n", FLT_MANT_DIG);
- printf("DBL_MANT_DIG: %d\n", DBL_MANT_DIG);
- printf("LDBL_MANT_DIG:%d\n", LDBL_MANT_DIG);
- printf("\n");
-
- //分别为能够使FLT_RADIX 的该整数减一次幂为规格化的 float、double 与 long double 的最小负整数
- printf("FLT_MIN_EXP: %d\n", FLT_MIN_EXP);
- printf("DBL_MIN_EXP: %d\n", DBL_MIN_EXP);
- printf("LDBL_MIN_EXP: %d\n", LDBL_MIN_EXP);
- printf("\n");
-
- //分别为能够使 10 的该整数减一次幂为规格化的 float、double 与 long double 的最小负整数
- printf("FLT_MIN_10_EXP:%d\n", FLT_MIN_10_EXP);
- printf("DBL_MIN_10_EXP:%d\n", DBL_MIN_10_EXP);
- printf("LDBL_MIN_10_EXP:%d\n", LDBL_MIN_10_EXP);
- printf("\n");
-
- //分别为能够使 FLT_RADIX 的该整数减一次幂为可表示的有限的 float、double 与 long double 的最大正整数
- printf("FLT_MAX_EXP: %d\n", FLT_MAX_EXP);
- printf("DBL_MAX_EXP: %d\n", DBL_MAX_EXP);
- printf("LDBL_MAX_EXP: %d\n", LDBL_MAX_EXP);
- printf("\n");
-
- //分别为能够使 10 的该整数减一次幂为可表示的有限的 float、double 与 long double 的最大正整数
- printf("FLT_MAX_10_EXP: %d\n", FLT_MAX_10_EXP);
- printf("DBL_MAX_10_EXP: %d\n", DBL_MAX_10_EXP);
- printf("LDBL_MAX_10_EXP:%d\n", LDBL_MAX_10_EXP);
- printf("\n");
-
- //浮点算术的默认舍入模式
- printf("FLT_ROUNDS: %d\n", FLT_ROUNDS);
- //指定进行所有算术运算所用的精度
- printf("FLT_EVAL_METHOD:%d\n", FLT_EVAL_METHOD);
- //指明类型是否支持非正规数值:-1 为不确定,0 为不支持,1 为支持。
- printf("FLT_HAS_SUBNORM:%d\n", FLT_HAS_SUBNORM);
- printf("DBL_HAS_SUBNORM:%d\n", DBL_HAS_SUBNORM);
- printf("LDBL_HAS_SUBNORM:%d\n", LDBL_HAS_SUBNORM);
- printf("\n");
- return 0;
- }
- PTRDIFF_MIN: -2147483648
- PTRDIFF_MAX: 2147483647
- SIZE_MAX: -1
- SIG_ATOMIC_MIN: -2147483648
- SIG_ATOMIC_MAX: 2147483647
- WCHAR_MIN: 0
- WCHAR_MAX: 65535
- WINT_MIN: 0
- WINT_MAX: 65535
-
- CHAR_BIT: 8
- MB_LEN_MAX: 5
- CHAR_MIN: -128
- CHAR_MAX: 127
-
- SCHAR_MIN: -128
- SHRT_MIN: -32768
- INT_MIN: -2147483648
- LONG_MIN: -2147483648
- LLONG_MIN: -9223372036854775808
-
- SCHAR_MAX: 127
- SHRT_MAX: 32767
- INT_MAX: 2147483647
- LONG_MAX: 2147483647
- LLONG_MAX: 9223372036854775807
-
- UCHAR_MAX: 255
- USHRT_MAX: 65535
- UINT_MAX: -1
- ULONG_MAX: 4294967295
- ULLONG_MAX: 18446744073709551615
-
- FLT_RADIX: 2
- DECIMAL_DIG: 21
- FLT_DECIMAL_DIG:9
- DBL_DECIMAL_DIG:17
- LDBL_DECIMAL_DIG:21
-
- FLT_MIN: 0.000000
- DBL_MIN: 0.000000
- LDBL_MIN: -0.000000
-
- FLT_TRUE_MIN: 0.000000
- DBL_TRUE_MIN: 0.000000
- LDBL_TRUE_MIN: 0.000000
-
- FLT_MAX: 340282346638528860000000000000000000000.000000
- DBL_MAX: 1797693134862315700000000000000000000000000000
- 0000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000
- 000000000000000000000000000000000.000000
- LDBL_MAX: -1.#QNAN0
-
- FLT_EPSILON: 0.000000
- DBL_EPSILON: 0.000000
- LDBL_EPSILON: -0.000000
-
- FLT_DIG: 6
- DBL_DIG: 15
- LDBL_DIG: 18
-
- FLT_MANT_DIG: 24
- DBL_MANT_DIG: 53
- LDBL_MANT_DIG:64
-
- FLT_MIN_EXP: -125
- DBL_MIN_EXP: -1021
- LDBL_MIN_EXP: -16381
-
- FLT_MIN_10_EXP:-37
- DBL_MIN_10_EXP:-307
- LDBL_MIN_10_EXP:-4931
-
- FLT_MAX_EXP: 128
- DBL_MAX_EXP: 1024
- LDBL_MAX_EXP: 16384
-
- FLT_MAX_10_EXP: 38
- DBL_MAX_10_EXP: 308
- LDBL_MAX_10_EXP:4932
-
- FLT_ROUNDS: 1
- FLT_EVAL_METHOD:2
- FLT_HAS_SUBNORM:1
- DBL_HAS_SUBNORM:1
- LDBL_HAS_SUBNORM:1