cout<<numeric_limits<double>::digits10<<endl;//输出:15
看起来double并不支持这种精度,那么long double呢?
cout<<numeric_limits<long double>::digits10<<endl; //输出:18
对了,它就可以。请注意,digits10对整型数也同样适用:
cout<<numeric_limits<long>::digits10<<endl; //输出:9
最大值与最小值
最大值与最小值即是对相应类型调用numeric_limits::max()和numeric_limits:min()所得到的值:
cout<<numeric_limits<int>::max()<<endl;// 2147483647
无限的<limits>
在IEC 559规范实现中,浮点数据类型可表示为\"不是一个数字\"或NaN。NaN是一种特殊的编码,其代表某种非法数字,可由非法指令产生,或意为指示一个不应被忽略的数值。如果出现在表达式中的NaN没有发出一个\"信号\",则其为\"安静\"状态;否则,其为一个发\"信号\"的NaN。下面的例子检查在目标平台上支持哪种NaN类型,并把NaN的值赋给一个变量:
double d=0;
if(numeric_limits<double>::has_quiet_NaN)
d=numeric_limits<double>::quiet_NaN();
else if (numeric_limits<double>::has_signaling_NaN)
d=numeric_limits<double>::signaling_NaN();
else cerr<<\"NaN for double isn\'t supported\";
无限在此是一种特殊的情况,其通常由被零除或其他操作产生。下例代码检查目标平台上是否定义了一种特殊的无限码,并把此值赋给一个变量:
float f=0;
if(numeric_limits<float>::has_infinity)
f=numeric_limits<float>::infinity();
else cerr<<\"infinity for float isn\'t supported\";
