温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • C语言浮点数之间的比较规则是什么

C语言浮点数之间的比较规则是什么

发布时间:2021-08-13 19:02:08 来源:亿速云 阅读:254 作者:chen 栏目: 开发技术

这篇文章主要介绍“C语言浮点数之间的比较规则是什么”,在日常操作中,相信很多人在C语言浮点数之间的比较规则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言浮点数之间的比较规则是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 你认为这段代码输出什么?

  • 为什么不等于呢?

  • 应该怎么解决?

    • 那么怎么判断两个浮点数 f1 和 f2 相等呢。

      • 伪代码

      • 可以简化为 >>

  • 怎么判断浮点数等于0?

    • 还有一个问题


你认为这段代码输出什么?

int main()
{
	float f1 = 1.1;
	float f2 = 2.2;
	if (f2 - 1.1 == f1)
		printf("等于");
	else
		printf("不等于");
	return 0;
}

答案是不等于。

C语言浮点数之间的比较规则是什么

为什么不等于呢?

因为在C语言中浮点数是存在精度损失的,有可能比原来的数大,也有可能小。 在下图所示,f1在打印小数点后30位时就能很明显的看出存在精度损失。

C语言浮点数之间的比较规则是什么

应该怎么解决?

浮点数不能直接用 == 号比较。那么应该怎么比较呢。

这里要引出精度这个概念,精度可以理解为引发一个浮点数发生改变的最小值。

当一个浮点数加上精度或者减去精度,都不等于该数本身。

精度可以是自己定义的,也可以用C语言自带的,它定义在 float.h 头文件中。

#define FLT_EPSILON      1.192092896e-07F        // smallest such that 1.0+FLT_EPSILON != 1.0
#define DBL_EPSILON      2.2204460492503131e-016 // smallest such that 1.0+DBL_EPSILON != 1.0

FLT_EPSILON 为float类型的默认精度,DBL_EPSILON 为double类型的精度。

那么怎么判断两个浮点数 f1 和 f2 相等呢。

虽然两个浮点数存在精度上的误差,但这个误差非常小,只要(f2 - f1)这个差值在负精度到正精度的区间内,就可以认为它们相等。

如图,它们的差值必须在 (-XXX_EPSILON,XXX_EPSILON) 这个区间内,才能说明它们相等。

C语言浮点数之间的比较规则是什么

伪代码
if(f2 - f1) > -XXX_EPSILON  && (f2 - f1)< XXX_EPSION){相等;}
可以简化为 >>
if (fabs(f2 - f1) < XXX_EPSILON) //fabs函数求绝对值,在math.h头文件中{相等;}

怎么判断浮点数等于0?

这个浮点数的绝对值小于精度,可以认为这个数为0。

if (fabs(f1) < XXX_EPSILON)
{
	//f1为0
}

还有一个问题

// 判断f1为0的条件 < 能换成 <= 吗

if (fabs(f1) < XXX_EPSILON) ->>  if (fabs(f1) <= XXX_EPSILON)

0的性质:任何数加上0,都等于它本身。
而上述也讲了精度的定义为浮点数加上XXX_ESILON 都会发生改变,如果 f1 可以等于 XXX_ESILON ,不是说一个浮点数加上0会发生改变吗,这明显不符合0的性质。所以是开区间,只能是 < 。

到此,关于“C语言浮点数之间的比较规则是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节
推荐阅读:
  1. Java语言与C语言之间的应用比较
  2. PHP浮点数比较的方法介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言
  • 上一篇新闻:
    c++对数器的作用及实现
  • 下一篇新闻:
    C语言怎么实现动态顺序表

猜你喜欢

  • win10重置电脑内存不够如何解决
  • 网站虚拟主机试用的方法是什么
  • 虚拟主机后台管理系统怎么搭建
  • win10图片无法打开如何解决
  • Win8无线网络无法连接如何解决
  • win7怎么设置ip地址
  • 怎么注册虚拟主机
  • 虚拟主机稳定性怎么测试
  • win7本地连接无法上网如何解决
  • win11正在进行更新卡住如何解决
最新资讯
  • 如何在Rails中使用Devise创建复杂的用户身份验证系统
  • Rails中的Custom Validators如何创建和使用
  • 如何在Rails中通过ActiveSupport::Notifications实现自定义事件
  • Rails中的JBuilder是如何工作的用于什么目的
  • 如何在Rails项目中使用Git进行版本控制
  • Rails部署中遇到的常见问题有哪些
  • 如何在Rails中实现和使用WebSockets进行实时通信
  • 解释Rails中Caching Strategies的差异及用例
  • 为何及如何在Rails中使用UUID作为主键
  • Rails如何处理多语言模型翻译
相关推荐
  • Python不同类型之间的运算规则是什么
  • php中浮点数比较的示例分析
  • c语言中常量定义的规则是什么
  • C语言中的命名规则是什么
  • C语言怎么输出浮点数
  • c++浮点数比较的精度问题怎么解决
  • js如何实现类型之间比较
  • MySQL字符集和比较规则是什么
  • C语言浮点数怎么使用
  • C语言命名规则是什么

相关标签

c语言的一些基础程序 c语言学习 c语言原创文章 c语言学习总结 c语言结构体 c语言中 c语言初学者 c语言操作 c语言指针 c语言基础 c语言库函数 c语言编程 c语言项目 c语言c程序c/c++ C语言标识符 ai android access == auto
AI

聚圣源优希麻琴youporn官网笔画五行起名k歌起名好听的名字给钻戒起浪漫名字女孩取四字起名的高的男孩起名字二十四史pdf诚实守信的故事贝克汉堡加盟优势午夜巴塞罗那大秦赋剧情介绍平天策小说温州起名涂料厂起名服饰公司起名大全四字房产质押开汽配店起什么名字好金牛座男人性格好想听你说爱我boyfriendtv机械加工公司起名大全姓甘女孩起名酒类商贸公司起名大全农夫山泉股价年内暴跌40%女孩起名测试评分标准起名字与易经如何从诗经楚辞中起名大全公司起名水产品起名陈嘉淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化