鱼C论坛

 找回密码
 立即注册
查看: 918|回复: 8

好奇怪的问题

[复制链接]
发表于 2019-3-8 09:00:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> 0.1 + 0.1 == 0.2
True
>>> 0.1 + 0.2 == 0.3
False

为什么会这样呢?我知道十进制数在计算机中用二进制表示会有不确定尾数,是不能精确表示的,但为什么0.1+0.1又可以精确等于0.2呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-8 09:03:09 | 显示全部楼层
不知道py中是否可以这样判断两个浮点数是否相等

但是c中,判断两个浮点数是否相等,却是不能使用==的,只能用精度来表示,比如 小数点后面几位相等 即视同相等
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-8 09:05:47 | 显示全部楼层
wp231957 发表于 2019-3-8 09:03
不知道py中是否可以这样判断两个浮点数是否相等

但是c中,判断两个浮点数是否相等,却是不能使用==的, ...

你说的意思是浮点数在计算机中都是不能精确表示的,对吧,但我觉得奇怪的是,为什么0.1+0.1却能用精确的数字表示,而0.1+0.2却不能。
>>> 0.1 + 0.1
0.2
>>> 0.1 + 0.2
0.30000000000000004
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-8 09:13:53 | 显示全部楼层
这个结果其实完全可能是随机的,因为即使是python中的double有效位数也不可能无限
所以实际编程中一般不会讲float类型的做相等判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-8 09:18:06 | 显示全部楼层
刚才百度了一下,在浮点数比较的问题上 py是和c 持有相同观点的
你的例子只能是特例,特例是不能被推广的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-8 09:18:23 | 显示全部楼层
BngThea 发表于 2019-3-8 09:13
这个结果其实完全可能是随机的,因为即使是python中的double有效位数也不可能无限
所以实际编程中一般不会 ...

那如果要进行浮点数的判断相等,在python中是怎么处理呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-8 09:20:32 | 显示全部楼层
  1. 判断a和b是否相等,低版python
  2. abs(a-b) < 1.0e-9 就认为a等于b了。
  3. python3.5 用math.isclose(a,b)
复制代码


这是网上搜到的,前面的abs的肯定没有问题,后面的我没有测试(我现在的是py2.7)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-8 09:22:02 | 显示全部楼层
jiaying 发表于 2019-3-8 09:18
那如果要进行浮点数的判断相等,在python中是怎么处理呢?

精度判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-8 09:23:06 | 显示全部楼层
明白了,感谢大家的解答。非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-14 10:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表