加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python中的近似比较

发布时间:2020-12-20 13:05:36 所属栏目:Python 来源:网络整理
导读:我想让’==’运算符在我的程序中使用近似比较:浮点值x和y是相等的(==)if abs(x-y)/(0.5(x+y)) 0.001 有什么好办法呢?鉴于float是一个内置类型,我认为我不能重新定义==运算符,是吗? 请注意,我想使用float的其他功能,我唯一想改变的是等于运算符. 编辑: 感
我想让’==’运算符在我的程序中使用近似比较:浮点值x和y是相等的(==)if

abs(x-y)/(0.5(x+y)) < 0.001

有什么好办法呢?鉴于float是一个内置类型,我认为我不能重新定义==运算符,是吗?

请注意,我想使用float的其他功能,我唯一想改变的是等于运算符.

编辑:

感谢您的回答,我理解您关于可读性和其他问题的论点.

也就是说,如果可能的话,我真的更希望实际使用常规浮点类型,而不是使用新类或新的比较函数.是否有可能重新定义==运算符的常规浮点数?

我的理由是::

(a)每个使用我正在编写的程序的人都希望以这种方式比较浮点数

(b)世界上没有办法让任何人想要使用默认的==浮点数.为什么它甚至在语言中?

(c)我不喜欢守则中的额外词语;显然使用现有的float会导致代码没有任何变化

编辑2.

既然我知道我不能重载浮动的==运算符,我必须改变我的问题.它将变得如此不同,我将在custom comparison for built-in containers创建一个新的

解决方法

你的定义有两个问题:

>缺少*
>如果x y == 0.0(这涵盖了可能经常发生的情况x == y == 0.0),将尝试除以零

试试这个:

define approx_Equal(x,y,tolerance=0.001):
    return abs(x-y) <= 0.5 * tolerance * (x + y)

编辑:注意使用< =而不是< ...需要使x == y == 0.0案例正常工作. 我不会试图覆盖== 编辑2:你写道:

there’s no way in the world anyone would ever want to use the default
== for floats.. Why is it even in the language???

没门?假设您有一个返回浮点数的函数,并且您有一个关于算法的脑波,可以更快和/或更优雅地生成相同的答案;你是如何测试的?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读