10.2.1 类模板numeric_limits及其成员
在数值限制模板numeric_limits中,对于所有声明的静态常量成员,在特殊化时应该定义它们的值,以确保在整型常量表达式中,它们是可以使用的。非基本类型,如复数类型complex<T>,不应该拥有特殊化。在头文件<limits>中,数值限制类的声明形式如下:
模板类numeric_limits的声明形式如下:
类模板中的成员is_specialized(特殊化类型)用于区分基本类型(具有特殊化性质)和非数量(非标量)类型。除了0或false之外,默认的数值极限模板类numeric_limits<T>应该包含所有成员。
下面逐一讲解数值限制类的各成员。
功能:求解最小有限值。对于非标准化的浮点类型,返回的是规范化的最小正值。使用此函数时,该类型对象的成员is_bounded!=false,或is_bounded==false并且is_signed==false。
功能:求解最大有限值。对于所有特殊化对象,只有当其成员is_bounded!=false时,此函数才有意义。
功能:成员digits代表能够表示的基数位数。对于整数类型,digits代表非负位的个数;对于浮点类型,基数的个数包含在尾数中。
功能:表示不会丢失精度的十进制数的位数。只有当对象的成员is_bounded!=false时,此函数才有意义。
功能:如果是有符号数,值为true;对于所有特殊化对象,此函数均是有意义的。
功能:如果类型是整数,值为true;对于所有特殊化对象,此函数均是有意义的。
功能:如果类型使用一个精确的表示,值为true。所有类型均是严格的,但并不是所有严格类型均为整数类型。例如,合理的定点数表示也是严格准确的,但并不是整数。
功能:对于浮点类型,此函数代表指数表达式的基数或底;对于整数类型,此函数代表表达式的底;对于所有特殊化对象,此函数均是有意义的。
功能:epsilon()函数返回值代表1和可表示的大于1的最小值之间的误差。对于所有浮点数类型,此函数均是有意义的。
功能:round_error()函数可获取最大的舍入误差。
功能:min_exponent函数返回一个最小负整数,幂的基数是成员radix,但该整数小于最小的规范化的浮点数。对于所有浮点类型,此函数均是有意义的。
功能:代表最小的负整数,10是幂的底数或基数,幂的值在规范化的浮点数范围内。对于所有浮点类型,此函数均是有意义的。
功能:代表最大的正整数指数。该正整数的基数或底是radix。
功能:代表最大的正指数(幂)整数。该整数的底或基数为10,幂系数是可表达的有限浮点数。
功能:如果表达式是正的无穷,值为true。对于所有浮点数,此函数均是有意义的。
功能:如果类型是一个关于quiet的(非信号量,不是成员)表达式,值为true。对于所有浮点类型,此函数是有意义的。对于所有特殊化对象,如果其成员is_iec559不等于false,has_quiet_NaN的值应该是true。
功能:如果类型是一个表达式,该表达式可以发出信号“Not a Number.”。成员has_signaling_NaN为真(true)。此函数对于所有浮点类型均是有意义的。对于所有特殊化对象,当其成员is_iec559不等于false时,has_signaling_NaN的值为true。
功能:如果是类型允许可表示的数值,成员has_denorm的值为denorm_present;如果是类型不允许可表示的值,成员has_denorm的值是denorm_absent;在编译程序时,如果不能确定该类型是否是可表示的数值,成员has_denorm的值为denorm_indeterminate。对于所有浮点类型,has_denorm均是有意义的。
功能:如果作为一个非规范化的loss,loss的准确度可以被检测到,而不是一个非精确的结果,此时has_denorm_loss的值为真。
功能:如果函数调用成功,且返回一个有效的数值,该数值为正的无穷大。对于所有特殊化对象,当其成员has_infinity!=false时,此函数均是有意义的;当其成员is_iec559!=false时,该特殊化也是必需的。
功能:如果函数正确调用话,函数返回值是一个非信号量,即“Not a Numer”。对于所有特殊化对象,当其成员has_quiet_NaN不等于false时,此函数均是有意义的,函数返回值为true;当其成员is_iec559!=false时,特殊化对象也是必需的。
功能:如果函数调用成功,函数返回值是一个非信号量的表达式。只有当对象的成员has_signaling_NaN不等于false时,该特殊化对象才有意义,函数返回值为true;当其成员is_iec559!=false时,特殊化对象才是必需的。
功能:函数返回正的最小规格化值。对于所有浮点类型,此函数均是有意义的。当特殊化对象的成员has_denorm等于false时,函数返回正的最小规格化值。
功能:当且仅当数值类型遵从IEC 559标准时,其成员is_iec559为true。对于所有浮点类型,此函数均是有意义的。
功能:如果数值集合是可以表达的,并且类型是有限的,其成员is_bounded为true。所有嵌入式类型均是有界的,成员是false对于那些任意的准确度类型。对于所有特殊化对象,此函数均是有意义的。
功能:如果类型是“模”表达式,其成员is_modulo为true;否则,为false。通常,对于浮点类型,其值为false;对于无符号整数,其值为true;对于大多数机器,有符号整数的值也是true。对于所有特殊化对象,此函数均是有意义的。
功能:对于该类型,如果捕获被执行,traps的值为true。对于所有特殊化对象,此函数均是有意义的。
功能:如果在舍入之前,“极小”被检测,tinyness_before的值为true。对于所有浮点类型,此函数均是有意义的。
功能:成员round_style代表舍入类型。对于整数类型的数值,其成员round_style的值为round_towars_zero。