我想让’==’运算符在我的程序中使用近似比较:如果x和y的浮点值相等(==)
abs(x-y)/(0.5(x+y)) < 0.001
有什么好的方法呢?鉴于float是内置类型,我认为我不能重新定义==运算符,可以吗?
请注意,我想使用float的其他功能,唯一要更改的是相等运算符。
编辑:
感谢您的回答,我了解您关于可读性和其他问题的观点。
也就是说,如果可能的话,我真的更希望实际上继续使用常规的float类型,而不是使用新的类或新的比较函数。甚至可以为常规浮点数重新定义==运算符吗?
我的原因是:
(a)使用我编写的程序的每个人都希望以这种方式比较浮点数
(b)世界上没有人会想对浮点数使用默认==。为什么甚至在语言中也是如此?
(c)我不喜欢守则中多余的字眼;显然,使用现有的float不会导致代码发生任何变化
编辑2。
现在,我知道我不能重载==运算符的float值,我必须更改我的问题。它将变得如此不同,我将在自定义比较中为内置容器创建一个新容器
您的定义有两个问题:
缺少 *
*
将尝试除以零,如果x + y == 0.0(其中涵盖了可能是常见的情况x == y == 0.0)
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:您写道:
世界上没有人会想对浮点数使用默认==。为什么甚至在语言中也是如此?
没门?假设您有一个返回浮点数的函数,并且对算法产生了很大的兴趣,该算法将更快和/或更优雅地产生相同的答案;你如何测试呢?