Aug 9, 2008

一个奇怪的问题

  上次做的项目有一个计算公式,是要求在浮点数之间取余数
  我知道有一个fmod函数是用于这样取余数的,于是在程序中我包含了头文件
  
  我写的语句是if(fmod(x,y) == 0)
                              {
                                  //余数为0的相关操作
                               }
                           else{//余数不为0的相关操作}
   然后测试的时候怪事出现了,当我把取成0.5时,算过去是可以的
   但是比如y为0.2,就会出现错误,比如说x=12.2 y=0.2应该是余数为0的吧,可是得数是很奇怪的数,有时会等0.2有时会等0.199999,实在郁闷

   后来我换了个公式,是这样的
    float f ;
f = x/y;
int z = ceil(f);//ceil取不小于f的最小整数
if((z-f) == 0 || (z - f) == 1 )
           {    //余数为0的相关操作
            }
        else{//余数不为0的相关操作}
    这回事情更蹊跷了
    跟进去的结果是大部分数都可以,少部分的不行
    比如6.2,11.4,12.4,22.8,32.6等
    跟出来的结果是当是这些数时,f与z也是或者绝对值相同,或者差1
    但是,即使f=62.0000000,z=62,减出来的结果居然还是不符合if的条件

    郁闷,这是怎么回事啊····总不会是CPU的ALU单元出问题了吧

No comments:

Powered By Blogger