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中运行的结果是对的
不知那位知道是什么原因

解决方案 »

  1.   

    比较正常
    debug 和Release 初始化 不一样
      

  2.   

    你把float 改为double试试,不知道是不是精度问题
      

  3.   

    debug 和Release有很多地方都不一样。
      

  4.   

    float 是4字节,精度 3.4E +/- 38 (7 digits) 
    double是8字节,精度 1.7E +/- 308 (15 digits) 
    而fabs返回值是double,与float比较会出现精度问题,但在debug模式,vc会把0.0f转化为double精度进行比较,所以是对的。但在release版本,vc没有进行相应的处理
      

  5.   

    用以下代码查看
    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之类的进行了近似。