浮点数问题,这是VC6.0的BUG吗?

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

我在win2000+vc6.0环境下运行一下代码:  
  /***********************************************    
  *file   name             :   float_accuracy.c    
  *description         :   x是float类型,什么情况下x!=x为真    
  *note                       :   若在判断x!=x前对x进行了修改,则    
                                    有可能使x!=x为真    
  *author                   :   kernelxu    
  *resource               :   http://bbs.chinaunix.net/forum/    
                                            viewtopic.php?t=575049&show_type=    
  *date                       :   2005/07/10    
  ***********************************************/    
   
  #include   <stdio.h>    
   
  /**********************************************    
  *function   name   :           main()    
  ***********************************************/    
  int   main(void)    
  {    
        float   x   =   (float)1e-3;    
   
        x   =   x   +   1;  
        //printf("hello   world!\n");    
        if   (x   !=   x)    
        {    
              printf("x   is   unequal   to   x!!\n");    
        }    
        else    
        {    
              printf("x   is   equal   to   x!\n");    
        }    
       
        return   0;    
  }/*end   of   main()*/  
  运行结果是:  
  x   is   unequal   to   x!!  
  加上被注释的那一条后,结果为:  
  x   is   equal   to   x!  
   
  怀疑是vc6.0的bug。  
  具体大家可看看:  
  http://bbs.chinaunix.net/forum/viewtopic.php?t=575049&show_type=

· 网友精彩回答:

发表者:qrlvls

可能是编译优化造成的吧,尝试使用  
  volatile   float   x   再看看有没有问题

发表者:vcmute

这里都是equal

发表者:happy__888

应该是编译器的问题吧  
  把文件按照c语言编译,debug和release版本都有问题  
  如果按照cpp语言编译就没有问题  
 

发表者:kurt8276

浮点数比较相等一般要好是  
  #define   exp   0.000001  
  (x-x)<=exp  
 

发表者:ydfivy

少用了一个fld.这是为什么呢?

发表者:thinp

vc6(sp5+processor   pack)+winxp9sp2),运行结果并没有问题,两次结果都一样,都为x   is   equal   to   x!

发表者:nelsonc

可能是编译器的问题。装上vc   sp5就好了。

发表者:realmiss

浮点数不精确   在除法中算的经常不准确   我遇到过一次具体情形忘了

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved