栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言丨比较浮点数的大小

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言丨比较浮点数的大小

由于实数在内存中是以浮点数形式存储的,阶码所占的位数决定实数的表数范围,尾数所占的位数决定实数的精度,ANSI C 并没有明确规定三种浮点类型的阶码和尾数所占的位数,不同的C编译器分配给阶码和尾数的位数是不同的,无论怎样,浮点数在内存中存储时其尾数所占的位数都是有限的,因此其所能表示的实数的精度也是有限的。

听起来很复杂?换句话说就是浮点数并非真正意义上的实数,只是其在某种范围内的近似。

如下列代码中:

float a = 876.4444;
printf("a = %f", a);

运行结果却是:

a = 846.444397

这正是因为float型变量仅能接收实型常量的7位有效数字,在有效数字后面输出的数字都是不准确的。

因此,浮点数大小比较由于精度问题,如果直接比较可能会出错,所以在比较的时候可以设定一个很小的数值(精度),当二者差小于设定的精度时,就认为二者是相等的。


比如:设置精度为1E-2,也就是0.01。对于两个浮点数a、b,如果fabs(a-b)<=1E-2,那么就是相等了;类似的判断大于的时候,就是if ((a>b)&&(fabs(a-b)>1E-2)); 判断小于的时候,就是if ((a1E-2));。


当然,精度的设置应有计算过程中需求而定,但要记住的是,只能用近似的方法比较浮点数的大小。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号