float max=0.2f;
float min=200.0f;
BOOL flag;
float ret=log10(max/min);
if(fabs(ret-(int)ret)>0.0f)flag=FALSE;
else flag=TRUE;
if(flag)AfxMessageBox("yds");在两个版本中运行的结果相反,在debug中运行的结果是对的
不知那位知道是什么原因
float min=200.0f;
BOOL flag;
float ret=log10(max/min);
if(fabs(ret-(int)ret)>0.0f)flag=FALSE;
else flag=TRUE;
if(flag)AfxMessageBox("yds");在两个版本中运行的结果相反,在debug中运行的结果是对的
不知那位知道是什么原因
解决方案 »
- 现在的it浮夸风啊
- Microsoft Web Browser 的问题 关于Navigate2函数
- MFC中图像控件显示CDC中位图
- 如何在绘图程序中实现标尺?
- 动态画图
- 关于开线程的操作
- DDraw的问题:如何缩放图像?
- 如何将结构体的数组清空?
- 定时更新CListCtrl中的内容,老闪,怎么办?
- 求问BCGControlBar工具栏添加动态更新的问题
- 不想用ADODataCtrol与DataGrid绑定使用,但不知道我定义的DataGrid地对象m_datagrid中用那个函数来设置数据源?
- 怎样取得SuperGridCtrl的RootItem,Item,SubItem的内容?(分不够再开)
debug 和Release 初始化 不一样
double是8字节,精度 1.7E +/- 308 (15 digits)
而fabs返回值是double,与float比较会出现精度问题,但在debug模式,vc会把0.0f转化为double精度进行比较,所以是对的。但在release版本,vc没有进行相应的处理
float max=0.2f;
float min=200.0f;
float ret=(float)log10(max/min);
BOOL flag; float ff = fabs(ret-(int)ret);
int decimal, sign;
char *buffer;
buffer = _fcvt( ff, 0, &decimal, &sign );
AfxMessageBox(buffer); if(ff>0.0f)flag=FALSE;
else flag=TRUE;
if(flag)AfxMessageBox("yds");
log10(max/min)de值不是3.000000000而是2.99999999
所以显示的ff为1。
究其原因在于max/min在Debug里返回的值是1000,在release里的不是,而是在函数log10(...)
后才确认其值。估计当作999.9999999之类的进行了近似。