本文主要详细介绍了C语言浮点函数中的modf和fmod。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
modf函数可以提取浮点数的整数和小数部分。fmod函数可以返回两个浮点数相除的余数。它们的功能原型如下:
double __cdecl modf(double _X,double * _ Y);
double __cdecl fmod(double _X,double _ Y);
这两个函数的作用看起来挺简单的,但是为什么一定要在C语言库中做一个特殊的函数来计算呢?在使用这两个函数之前,先看一个简单的浮点数相关的例子。
int main()
{
int I;
float j=1.0
for(I=0;i100我)
{
j=0.1
printf('%f \n ',j);
}
return(0);
}
一个浮点数1.0每次加0.1,总计100,感觉就是一个简单的加法运算,它的输出结果肯定知道是什么。让我们运行这段代码,输出结果如下:
乍一看,是不是感觉电脑算错了?你是怎么数的?结果走火了。其实计算机没有出错,程序的结果是正确的。这里用一个在线浮点数转换工具来验证一下。
首先看浮点数1.0在内存中的存储。
看看浮点数2.8在内存中的存储。
通过对比可以看出,1.0的实际存储值为1,与真实值相同。2.8的实际存储值是2.799995362841796875,和真实值已经有了一点误差。那么是什么导致了这个错误呢?这里我们就从浮点数的存储原理说起。
在一般的C语言中,一个浮点数占用32位,其中第一位代表符号位,0代表正数,1代表负数。接下来8位表示指数部分,也就是浮点数会用指数计数来表示。这8位是指数部分的值,但是这里的指数是基于2的。剩下的23位代表尾数,是有效数据。
因为小数部分是通过2个2^a 2^b 2^c的累加来实现的.2^n 2 N,指数的累加不一定100%等于原值,但也只能无限接近原值。所以浮点数的运算没有整数那么简单。为了保证浮点数的准确性,C语言的库函数为我们提供了这两个浮点数运算函数,使用起来很方便。
我们来看看modf函数的用法。
#包含stdio.h
#包含数学. h
int main()
{
双x,fractpart,intpart
x=8.123456
fractpart=modf(x,int part);
Printf('整数部分=%lf\n ',int part);
Printf('小数部分=%lf \n ',fract part);
return(0);
}
modf函数有两个参数。第一个参数是要操作的浮点数,第二个参数用于存储浮点数的整数部分。它的返回值是浮点数的小数部分。
从输出结果可以看出,浮点数的整数和小数部分的精度没有损失。
再看看fmod函数的用法。
#包含stdio.h
#包含数学. h
int main()
{
浮动a,b;
int c;
a=9.0
b=3.7
c=2;
printf(' % f/% f '的余数是%lf\n ',a,b,fmod(a,b));
printf(' % f/% d '的余数是%lf\n ',a,c,fmod(a,c));
return(0);
}
fmod功能有两个参数。第一个参数是分子,第二个参数是分母。它返回第一个参数除以第二个参数的余数。
从输出结果可以看出,浮点数的精度并没有损失。
总结
本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。