首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于调试中模板实例赋值给变量值得有关问题,d得值为什么是这样得

2012-02-10 
关于调试中模板实例赋值给变量值得问题,d得值为什么是这样得?(vs2003-debug)#includeiostreamusingstd::

关于调试中模板实例赋值给变量值得问题,d得值为什么是这样得?
(vs2003-debug)
#include   <iostream>

using   std::cout;

template   <typename   Type,   int   size>
Type   min(   Type   (&r_array)[size]   )
{
Type   min_val   =   r_array[0];
for   (   int   i   =   1;   i   <   size;   ++i   )
if   (   r_array[i]   <   min_val   )
min_val   =   r_array[i];
return   min_val;
}
//   size   没有指定——ok
//   size   =   初始化表中的值的个数
int   ia[]   =   {   10,   7,   14,   3,   25   };
double   da[6]   =   {   10.2,   7.1,   14.5,   3.2,   25.0,   16.8   };
#include   <iostream>
int   main()
{
//   为5   个int   的数组实例化min()
//   Type   =>   int,   size   =>   5
int   i   =   min(   ia   );
if   (   i   !=   3   )
cout   < <   "??oops:   integer   min()   failed\n ";
else   cout   < <   "!!ok:   integer   min()   worked\n ";
//   为   6   个   double   的数组实例化   min()
//   Type   =>   double,   size   =>   6
double   d   =   min(   da   );//调试中查看d=3.2000000000000002   ???  
if   (   d   !=   3.2   )              
                  cout   < <   "??oops:   double   min()   failed\n ";
else   cout   < <   "!!ok:   double   min()   worked\n ";
return   0;
}

[解决办法]
千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“> =”或“ <=”形式。
假设浮点变量的名字为x,应当将
if (x == 0.0) // 隐含错误的比较
转化为
if ((x> =-EPSINON) && (x <=EPSINON))
其中EPSINON是允许的误差(即精度)。

[解决办法]
去搜索IEEE的浮点表示的资料吧。

热点排行