(1):与MFC的兼容性
MFC程序过程中使用STL一些类编译出错,开始我认为是我写错了,放到Console Application里一切正常。
比如:
void CMyDialog::OnBnClickedButton1()
{
double min=std::numeric_limits<double>::max();
void *p=:perator new(count);
}
若在Console中根本没问题。但在MFC中numeric_limits错误提示:
Error 2 error C2589: '(' : illegal token on right side of '::'
operator new错误提示:
Error 1 error C2665: 'operator new' : none of the 5 overloads could convert all the argument types
解决方案:
跟Windows中定义的宏想混淆了
可以用括号改变语句的顺序,强制转换为stl中的函数名
double min=(std::numeric_limits<double>::max)();
(2): 小例展示numeric_limits的基本用法:
我机器上的运行结果:
关于为什么float的最小值竟然是正的?我也存在疑问,从结果中,我们看出,min返回的是float型别可以表示的最小的正值,
而不是最小的float数。从这个例子中,我们差不多了解到numeric_limits的基本用法。
3. 基本成员函数
我以float类型来展示:
运行结果:
(3):关于STL:Numberic_limit()
原文链接:http://www.cplusplus.com/reference/limits/numeric_limits/
template <class T> numeric_limits;
fundamental arithmetic types | |
---|---|
integral types | bool |
char |
|
wchar_t |
|
signed char |
|
short int |
|
int |
|
long int |
|
unsigned char |
|
unsigned short int |
|
unsigned int |
|
unsigned long int |
|
floating point types | float |
double |
|
long double |
member | type | property |
---|---|---|
is_specialized | bool |
true for all arithmetic types (i.e., those for which numeric_limits is specialized).false for all other types. |
min() | T | Minimum finite value. For floating types with denormalization (variable number of exponent bits): minimum positive normalized value. Equivalent to CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN,DBL_MIN, LDBL_MIN or 0 , depending on type. |
max() | T | Maximum finite value. Equivalent to CHAR_MAX, SCHAR_MAX, UCHAR_MAX, SHRT_MAX, USHRT_MAX, INT_MAX, UINT_MAX,LONG_MAX, ULONG_MAX, LLONG_MAX, ULLONG_MAX, UINT_LEAST16_MAX, UINT_LEAST32_MAX, FLT_MAX,DBL_MAX or LDBL_MAX, depending on type. |
lowest() | T | Minimum finite value. (since C++11) For integral types: the same as min(). For floating-point types: implementation-dependent; generally, the negative ofmax(). |
digits | int | For integer types: number of non-sign bits (radix base digits) in the representation. For floating types: number of digits (in radix base) in the mantissa (equivalent toFLT_MANT_DIG, DBL_MANT_DIG or LDBL_MANT_DIG). |
digits10 | int |
Number of digits (in decimal base) that can be represented without change. Equivalent to FLT_DIG, DBL_DIG or LDBL_DIG for floating types. |
is_signed | bool |
true if type is signed. |
is_integer | bool |
true if type is integer. |
is_exact | bool |
true if type uses exact representations. |
radix | int |
For integer types: base of the representation. For floating types: base of the exponent of the representation (equivalent toFLT_RADIX). |
epsilon() | T | Machine epsilon (the difference between 1 and the least value greater than 1 that is representable). Equivalent to FLT_EPSILON, DBL_EPSILON or LDBL_EPSILON for floating types. |
round_error() | T | Measure of the maximum rounding error. |
min_exponent | int |
Minimum negative integer value such that radix raised to (min_exponent-1) generates a normalized floating-point number.Equivalent to FLT_MIN_EXP, DBL_MIN_EXP or LDBL_MIN_EXP for floating types. |
min_exponent10 | int |
Minimum negative integer value such that 10 raised to that power generates a normalized floating-point number. Equivalent to FLT_MIN_10_EXP, DBL_MIN_10_EXP or LDBL_MIN_10_EXP for floating types. |
max_exponent | int |
Maximum integer value such that radix raised to (max_exponent-1) generates a representable finite floating-point number.Equivalent to FLT_MAX_EXP, DBL_MAX_EXP or LDBL_MAX_EXP for floating types. |
max_exponent10 | int |
Maximum integer value such that 10 raised to that power generates a normalized finite floating-point number. Equivalent to FLT_MAX_10_EXP, DBL_MAX_10_EXP or LDBL_MAX_10_EXP for floating types. |
has_infinity | bool |
true if the type has a representation for positive infinity. |
has_quiet_NaN | bool |
true if the type has a representation for a quiet (non-signaling) "Not-a-Number". |
has_signaling_NaN | bool |
true if the type has a representation for a signaling "Not-a-Number". |
has_denorm | float_denorm_style | Denormalized values (representations with a variable number of exponent bits). A type may have any of the following enum values: denorm_absent, if it does not allow denormalized values. denorm_present, if it allows denormalized values. denorm_indeterminate, if indeterminate at compile time. |
has_denorm_loss | bool |
true if a loss of accuracy is detected as a denormalization loss, rather than an inexact result. |
infinity() | T | Representation of positive infinity, if available. |
quiet_NaN() | T | Representation of quiet (non-signaling) "Not-a-Number", if available. |
signaling_NaN() | T | Representation of signaling "Not-a-Number", if available. |
denorm_min() | T | Minimum positive denormalized value. For types not allowing denormalized values: same as min() . |
is_iec559 | bool |
true if the type adheres to IEC-559 / IEEE-754 standard.An IEC-559 type always has has_infinity, has_quiet_NaN and has_signaling_NaN set to true ; And infinity, quiet_NaN and signaling_NaN return some non-zero value. |
is_bounded | bool |
true if the set of values represented by the type is finite. |
is_modulo | bool |
true if the type is modulo. A type is modulo if it is possible to add two positive numbers and have a result that wraps around to a third number that is less. |
traps | bool |
true if trapping is implemented for the type. |
tinyness_before | bool |
true if tinyness is detected before rounding. |
round_style | float_round_style | Rounding style. A type may have any of the following enum values: round_toward_zero, if it rounds toward zero. round_to_nearest, if it rounds to the nearest representable value. round_toward_infinity, if it rounds toward infinity. round_toward_neg_infinity, if it rounds toward negative infinity. round_indeterminate, if the rounding style is indeterminable at compile time. |
下面是参数的解释
digits10 |
返回目标类型在十进制下可以表示的最大位数 |
epsilon |
返回目标数据类型能表示的最逼近1的正数和1的差的绝对值 |
has_denorm |
测试目标类型是不是可以非规范化表示示 |
has_denorm_loss |
测试所有类型是不是能测出因为非规范化而造成的精度损失(不是因为结果本身的不精确) |
has_infinity |
测试目标类型是不是能表示无限(比如被0除,或者其他一些情况) |
has_quiet_NaN |
检查目标类型是不是支持安静类型的NaN |
has_signaling_NaN |
检查目标类型是不是支持信号类型的NaN |
infinity |
检查目标类型的无限类型(如果支持无限表示) |
is_bounded |
检查目标类型的取值是否有限 |
is_exact |
测试目标类型的计算结果是不是不会造成舍入误差(比如float是0) |
is_iec559 |
测试目标类型是不是符合IEC559标准 |
is_integer |
测试目标类型是不是可以用整型来表示(比如char是1,float是0) |
is_modulo |
Tests if a type has a modulo representation. |
is_signed |
测试目标类型是否是带符号的 |
is_specialized |
测试目标类型是不是在numeric_limits .模板类中有特殊定义 |
max |
返回可取的有限最大值 |
max_exponent |
Returns the maximum positive integral exponent that the floating-point type can represent as a finite value when a base of radix is raised to that power. |
max_exponent10 |
Returns the maximum positive integral exponent that the floating-point type can represent as a finite value when a base of ten is raised to that power. |
min |
返回可取的最小值(规范化) |
min_exponent |
Returns the maximum negative integral exponent that the floating-point type can represent as a finite value when a base of radix is raised to that power. |
min_exponent10 |
Returns the maximum negative integral exponent that the floating-point type can represent as a finite value when a base of ten is raised to that power. |
quiet_NaN |
返回目标类型的安静NAN的表示 |
radix |
Returns the integral base, referred to as radix, used for the representation of a type. |
round_error |
返回目标类型的最大可能的舍入误差 |
round_style |
Returns a value that describes the various methods that an implementation can choose for rounding a floating-point value to an integer value. |
signaling_NaN |
返回目标类型关于信号NAN的表示 |
tinyness_before |
测试目标类型是不是能测定出微小的舍入误差 |
traps |
Tests whether trapping that reports on arithmetic exceptions is implemented for a type. |
|
|
|
|
Minimum value for int: -2147483648 Maximum value for int: 2147483647 int is signed: true Non-sign bits in int: 31 int has infinity: false |