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

C 数值极限接口

参阅 std::numeric_limits 接口

定义于头文件 <cstdint>

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 类型对象的最大值
(宏常量)

 

整数类型极限

定义于头文件 <climits>

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 。

浮点类型极限

定义于头文件 <cfloat>

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 <stdio.h>
#include <stdint.h>
#include <limits.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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值