%与fmod()在计算余数时的区别与联系
一、% 运算符
% 只用于整型的计算,后一个数不能是0,参与运算的数据可正可负。
对于x%y ,计算之后结果的正负与x的符号相同,如果前者是较小的数,后者是较大的数,那么,结果直接为较小的数。
例如:
10%3=1
3%10=3
10%-3=1
-3%10=-3
-10%-3=-1
-3%-10=-3
3%13=3
0%3=0
0%-3=0
3%0 (×)Error!
-3%0 (×)Error!
10.0%3.0 (×)Error!浮点型不能进行模运算
二、fmod()函数
fmod()函数包含于math.h头文件中,它可以对浮点型数据进行取模运算
这是它的原型 double fmod(double x,double y)
fmod()函数没有%那样的要求,后一个数可为0,这时函数返回NaN
当参数为小数是,会进行如下运算:
返回值 = x-n×y
其中n=x÷y ,并向离开0的方向取整
计算后结果的符号与前者(x)相同,如果前者是较小的数,后者是较大的数,那么结果直接为较小的数。
例如:
float x=10.0;
float y=-3.0;
float z=3.0;
result=fmod(x,z); //应用 double fmod(double x,double y) 求浮点型的余数
printf("10.0%%3.0= %f/n",result); //1.0
result=fmod(z,x);
printf("3.0%%10.0= %f/n",result); //3.0
result=fmod(x,y);
printf("10.0%%-3.0= %f/n",result); //1.0
result=fmod(y,x);
printf("-3.0%%10.0= %f/n",result); //-3.0
result=fmod(0,z);
printf("0.0%%3.0= %f/n",result); //0.0
result=fmod(0,y);
printf("0.0%%-3.0= %f/n",result); //0.0
result=fmod(3,13);
printf("3%%-13= %f/n",result); //3
result=fmod(10.1,3.1);
printf("10.1%%3.1= %f/n",result); //0.8
result=fmod(10.9,3.9);
printf("10.9%%3.9= %f/n",result); //3.1
result=fmod(10.9,-3.9);
printf("10.9%%-3.9= %f/n",result); //3.1
result=fmod(-10.9,3.9);
printf("-10.9%%3.9= %f/n",result); //-3.1
result=fmod(-10.9,-3.9);
printf("-10.9%%-3.9= %f/n",result); //-3.1
result=fmod(-10.9,12);
printf("-10.9%%12= %f/n",result); //-10.9
转自:http://m.blog.csdn.net/blog/nista/5903582