我知道有一个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:
Post a Comment