在Python和一般的浮点平等 [英] floating point equality in Python and in general

查看:188
本文介绍了在Python和一般的浮点平等的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一段代码,其行为有所不同,具体取决于我是通过字典获取转换因子还是直接使用它们。



代码将打印 1.0 == 1.0 - > False



但如果用因子[units_from] > 10.0 和因素[units_to] 1.0 / 2.54 它会打印 1.0 == 1.0 - > True

 #!/ usr / bin / env python 

base ='cm'
因子= {
'cm':1.0,
'mm':10.0,
'm':0.01,
'km':1.0 e-5,
'in:1.0 / 2.54,
'ft':1.0 / 2.54 / 12.0,
'yd':1.0 / 2.54 / 12.0 / 3.0,
'mile':1.0 / 2.54 / 12.0 / 5280,
'lightyear':1.0 / 2.54 / 12.0 / 5280 / 5.87849981e12,
}

#将25.4毫米转换为英寸
val = 25.4
units_from ='mm'
units_to ='in'

ase_value = val / factors [units_from]
ret = base_value * factors [units_to]
print ret,'==',1.0,' - >',ret == 1.0

首先让我说,我很确定这里发生了什么事情。我之前在C中看到过,从来没有在Python中,但是因为在C中实现了Python,所以我们看到了它。



我知道浮点数会改变数值从一个CPU寄存器缓存并返回。我知道,比较两个相等的变量将会返回false,如果其中一个被分页,而另一个留在寄存器。






  • 避免类似这样的问题的最好方法是什么?...在​​Python中或一般情况下。 $ b
  • 我是否做了完全错误的事情?



注意



这显然是一个精简的例子的一部分,但我想要做的是与类,长度,体积等,可以比较对同一类的其他对象,但与不同单位。
$ b 修辞问题

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆