• C++标准模板(STL)- 类型支持 (数值极限,C 数值极限接口)


    C 数值极限接口

    参阅 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_BITMB_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 为支持。
    (宏常量)

     调用示例

    1. #include .h>
    2. #include .h>
    3. #include .h>
    4. #include <float.h>
    5. int main()
    6. {
    7. //std::ptrdiff_t 类型对象的最小值
    8. printf("PTRDIFF_MIN: %d\n", PTRDIFF_MIN);
    9. //std::ptrdiff_t 类型对象的最大值
    10. printf("PTRDIFF_MAX: %d\n", PTRDIFF_MAX);
    11. //std::size_t 类型对象的最大值
    12. printf("SIZE_MAX: %d\n", SIZE_MAX);
    13. //std::sig_atomic_t 类型对象的最小值
    14. printf("SIG_ATOMIC_MIN: %d\n", SIG_ATOMIC_MIN);
    15. //std::sig_atomic_t 类型对象的最大值
    16. printf("SIG_ATOMIC_MAX: %d\n", SIG_ATOMIC_MAX);
    17. //wchar_t 类型对象的最小值
    18. printf("WCHAR_MIN: %d\n", WCHAR_MIN);
    19. //wchar_t 类型对象的最大值
    20. printf("WCHAR_MAX: %d\n", WCHAR_MAX);
    21. //std::wint_t 类型对象的最小值
    22. printf("WINT_MIN: %d\n", WINT_MIN);
    23. //std::wint_t 类型对象的最大值
    24. printf("WINT_MAX: %d\n", WINT_MAX);
    25. printf("\n");
    26. //整数类型极限
    27. //字节的位数
    28. printf("CHAR_BIT: %d\n", CHAR_BIT);
    29. //多字节字符的最大字节数
    30. printf("MB_LEN_MAX: %d\n", MB_LEN_MAX);
    31. //char 的最小值
    32. printf("CHAR_MIN: %d\n", CHAR_MIN);
    33. //char 的最大值
    34. printf("CHAR_MAX: %d\n", CHAR_MAX);
    35. printf("\n");
    36. //分别为 signed char、short、int、long 及 long long 的最小值
    37. printf("SCHAR_MIN: %d\n", SCHAR_MIN);
    38. printf("SHRT_MIN: %d\n", SHRT_MIN);
    39. printf("INT_MIN: %d\n", INT_MIN);
    40. printf("LONG_MIN: %I32d\n", LONG_MIN);
    41. printf("LLONG_MIN: %I64d\n", LLONG_MIN);
    42. printf("\n");
    43. //分别为 signed char、short、int、long 及 long long 的最大值
    44. printf("SCHAR_MAX: %d\n", SCHAR_MAX);
    45. printf("SHRT_MAX: %d\n", SHRT_MAX);
    46. printf("INT_MAX: %d\n", INT_MAX);
    47. printf("LONG_MAX: %I32d\n", LONG_MAX);
    48. printf("LLONG_MAX: %I64d\n", LLONG_MAX);
    49. printf("\n");
    50. //分别为 unsigned char、unsigned short、unsigned int、
    51. //unsigned long 及 unsigned long long 的最大值
    52. printf("UCHAR_MAX: %d\n", UCHAR_MAX);
    53. printf("USHRT_MAX: %d\n", USHRT_MAX);
    54. printf("UINT_MAX: %d\n", UINT_MAX);
    55. printf("ULONG_MAX: %I32u\n", ULONG_MAX);
    56. printf("ULLONG_MAX: %I64u\n", ULLONG_MAX);
    57. printf("\n");
    58. //浮点类型极限
    59. //所有三种浮点类型的表示所用的基数(整数底)
    60. printf("FLT_RADIX: %d\n", FLT_RADIX);
    61. //从 long double 转换到至少有 DECIMAL_DIG 位数字的十进制表示,
    62. //再转换回 long double 为恒等转换:这是序列化/反序列化 long double 所要求的十进制精度
    63. //(参阅 std::numeric_limits::max_digits10)
    64. printf("DECIMAL_DIG: %d\n", DECIMAL_DIG);
    65. printf("FLT_DECIMAL_DIG:%d\n", FLT_DECIMAL_DIG);
    66. printf("DBL_DECIMAL_DIG:%d\n", DBL_DECIMAL_DIG);
    67. printf("LDBL_DECIMAL_DIG:%d\n", LDBL_DECIMAL_DIG);
    68. printf("\n");
    69. //分别为 float、double 与 long double 的最小规格化正数值
    70. printf("FLT_MIN: %f\n", FLT_MIN);
    71. printf("DBL_MIN: %f\n", DBL_MIN);
    72. printf("LDBL_MIN: %lf\n", LDBL_MIN);
    73. printf("\n");
    74. //分别为 float、double 与 long double 的最小正数值
    75. printf("FLT_TRUE_MIN: %f\n", FLT_TRUE_MIN);
    76. printf("DBL_TRUE_MIN: %f\n", DBL_TRUE_MIN);
    77. printf("LDBL_TRUE_MIN: %lf\n", LDBL_TRUE_MIN);
    78. printf("\n");
    79. //分别为 float、double 与 long double 的最大值
    80. printf("FLT_MAX: %f\n", FLT_MAX);
    81. printf("DBL_MAX: %f\n", DBL_MAX);
    82. printf("LDBL_MAX: %lf\n", LDBL_MAX);
    83. printf("\n");
    84. //分别为 1.0 和 float、double 及 long double 的下一个可表示值之差
    85. printf("FLT_EPSILON: %f\n", FLT_EPSILON);
    86. printf("DBL_EPSILON: %f\n", DBL_EPSILON);
    87. printf("LDBL_EPSILON: %lf\n", LDBL_EPSILON);
    88. printf("\n");
    89. //保证能在文本→ float/double/long double →文本的往返转换中保留而不会
    90. //因舍入或溢出发生改变的的十进制位数(解释参阅 std::numeric_limits::digits10)
    91. printf("FLT_DIG: %d\n", FLT_DIG);
    92. printf("DBL_DIG: %d\n", DBL_DIG);
    93. printf("LDBL_DIG: %d\n", LDBL_DIG);
    94. printf("\n");
    95. //分别为能无精度损失地表示成 float、double 及 long double 的基数 FLT_RADIX 的数字位数
    96. printf("FLT_MANT_DIG: %d\n", FLT_MANT_DIG);
    97. printf("DBL_MANT_DIG: %d\n", DBL_MANT_DIG);
    98. printf("LDBL_MANT_DIG:%d\n", LDBL_MANT_DIG);
    99. printf("\n");
    100. //分别为能够使FLT_RADIX 的该整数减一次幂为规格化的 float、double 与 long double 的最小负整数
    101. printf("FLT_MIN_EXP: %d\n", FLT_MIN_EXP);
    102. printf("DBL_MIN_EXP: %d\n", DBL_MIN_EXP);
    103. printf("LDBL_MIN_EXP: %d\n", LDBL_MIN_EXP);
    104. printf("\n");
    105. //分别为能够使 10 的该整数减一次幂为规格化的 float、double 与 long double 的最小负整数
    106. printf("FLT_MIN_10_EXP:%d\n", FLT_MIN_10_EXP);
    107. printf("DBL_MIN_10_EXP:%d\n", DBL_MIN_10_EXP);
    108. printf("LDBL_MIN_10_EXP:%d\n", LDBL_MIN_10_EXP);
    109. printf("\n");
    110. //分别为能够使 FLT_RADIX 的该整数减一次幂为可表示的有限的 float、double 与 long double 的最大正整数
    111. printf("FLT_MAX_EXP: %d\n", FLT_MAX_EXP);
    112. printf("DBL_MAX_EXP: %d\n", DBL_MAX_EXP);
    113. printf("LDBL_MAX_EXP: %d\n", LDBL_MAX_EXP);
    114. printf("\n");
    115. //分别为能够使 10 的该整数减一次幂为可表示的有限的 float、double 与 long double 的最大正整数
    116. printf("FLT_MAX_10_EXP: %d\n", FLT_MAX_10_EXP);
    117. printf("DBL_MAX_10_EXP: %d\n", DBL_MAX_10_EXP);
    118. printf("LDBL_MAX_10_EXP:%d\n", LDBL_MAX_10_EXP);
    119. printf("\n");
    120. //浮点算术的默认舍入模式
    121. printf("FLT_ROUNDS: %d\n", FLT_ROUNDS);
    122. //指定进行所有算术运算所用的精度
    123. printf("FLT_EVAL_METHOD:%d\n", FLT_EVAL_METHOD);
    124. //指明类型是否支持非正规数值:-1 为不确定,0 为不支持,1 为支持。
    125. printf("FLT_HAS_SUBNORM:%d\n", FLT_HAS_SUBNORM);
    126. printf("DBL_HAS_SUBNORM:%d\n", DBL_HAS_SUBNORM);
    127. printf("LDBL_HAS_SUBNORM:%d\n", LDBL_HAS_SUBNORM);
    128. printf("\n");
    129. return 0;
    130. }

    输出

    1. PTRDIFF_MIN: -2147483648
    2. PTRDIFF_MAX: 2147483647
    3. SIZE_MAX: -1
    4. SIG_ATOMIC_MIN: -2147483648
    5. SIG_ATOMIC_MAX: 2147483647
    6. WCHAR_MIN: 0
    7. WCHAR_MAX: 65535
    8. WINT_MIN: 0
    9. WINT_MAX: 65535
    10. CHAR_BIT: 8
    11. MB_LEN_MAX: 5
    12. CHAR_MIN: -128
    13. CHAR_MAX: 127
    14. SCHAR_MIN: -128
    15. SHRT_MIN: -32768
    16. INT_MIN: -2147483648
    17. LONG_MIN: -2147483648
    18. LLONG_MIN: -9223372036854775808
    19. SCHAR_MAX: 127
    20. SHRT_MAX: 32767
    21. INT_MAX: 2147483647
    22. LONG_MAX: 2147483647
    23. LLONG_MAX: 9223372036854775807
    24. UCHAR_MAX: 255
    25. USHRT_MAX: 65535
    26. UINT_MAX: -1
    27. ULONG_MAX: 4294967295
    28. ULLONG_MAX: 18446744073709551615
    29. FLT_RADIX: 2
    30. DECIMAL_DIG: 21
    31. FLT_DECIMAL_DIG:9
    32. DBL_DECIMAL_DIG:17
    33. LDBL_DECIMAL_DIG:21
    34. FLT_MIN: 0.000000
    35. DBL_MIN: 0.000000
    36. LDBL_MIN: -0.000000
    37. FLT_TRUE_MIN: 0.000000
    38. DBL_TRUE_MIN: 0.000000
    39. LDBL_TRUE_MIN: 0.000000
    40. FLT_MAX: 340282346638528860000000000000000000000.000000
    41. DBL_MAX: 1797693134862315700000000000000000000000000000
    42. 0000000000000000000000000000000000000000000000
    43. 0000000000000000000000000000000000000000000000
    44. 0000000000000000000000000000000000000000000000
    45. 0000000000000000000000000000000000000000000000
    46. 0000000000000000000000000000000000000000000000
    47. 000000000000000000000000000000000.000000
    48. LDBL_MAX: -1.#QNAN0
    49. FLT_EPSILON: 0.000000
    50. DBL_EPSILON: 0.000000
    51. LDBL_EPSILON: -0.000000
    52. FLT_DIG: 6
    53. DBL_DIG: 15
    54. LDBL_DIG: 18
    55. FLT_MANT_DIG: 24
    56. DBL_MANT_DIG: 53
    57. LDBL_MANT_DIG:64
    58. FLT_MIN_EXP: -125
    59. DBL_MIN_EXP: -1021
    60. LDBL_MIN_EXP: -16381
    61. FLT_MIN_10_EXP:-37
    62. DBL_MIN_10_EXP:-307
    63. LDBL_MIN_10_EXP:-4931
    64. FLT_MAX_EXP: 128
    65. DBL_MAX_EXP: 1024
    66. LDBL_MAX_EXP: 16384
    67. FLT_MAX_10_EXP: 38
    68. DBL_MAX_10_EXP: 308
    69. LDBL_MAX_10_EXP:4932
    70. FLT_ROUNDS: 1
    71. FLT_EVAL_METHOD:2
    72. FLT_HAS_SUBNORM:1
    73. DBL_HAS_SUBNORM:1
    74. LDBL_HAS_SUBNORM:1

  • 相关阅读:
    03_SpingBoot 核心配置文件
    Fiddler(六) - http请求的结果分析-创建一个自己的响应
    DBeaver manual
    PMP考试20天能通过吗?
    vue2+若依框架plus交互 路由介绍
    C基础-数组
    【高端电流检测IC储能产品应用方案】耐压45V侧轨的电流检测芯片FP137 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等
    Java 8 Stream 从入门到进阶——像SQL一样玩转集合
    用数据观测Page Cache
    QT采用共享内存方式实现进程间通信
  • 原文地址:https://blog.csdn.net/qq_40788199/article/details/133840977