我想让’==’运算符在我的程序中使用近似比较:如果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
)
尝试以下方法:
define approx_Equal(x, y, tolerance=0.001):
return abs(x-y) <= 0.5 * tolerance * (x + y)
编辑:请注意需要使用<=
而不是<
…来使x == y == 0.0
案例正常工作。
我不会尝试覆盖 ==
编辑2:您写道:
世界上没有人会想对浮点数使用默认==。为什么甚至在语言中也是如此?
没门?假设您有一个返回浮点数的函数,并且对算法产生了很大的兴趣,该算法将更快和/或更优雅地产生相同的答案;你如何测试呢?
一些async fn状态机可以安全地越过线程发送,而其他则不能。判断一个async fn Future是不是Send,由非Send类型是否越过一个.await据点决定的。当可以越过了.await据点,编译器会尽力去估计这个是/否。但是今天的许多地方,这种分析都太保守了。 例如,考虑一个简单的非Send类型,也许包含一个Rc: use std::rc::Rc; #[derive(Default)]
回忆上一节的内容。跳字模型的核心在于使用softmax运算得到给定中心词$w_c$来生成背景词$w_o$的条件概率 $$P(w_o \mid w_c) = \frac{\text{exp}(\boldsymbol{u}_o^\top \boldsymbol{v}c)}{ \sum{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsy
试图写一个程序在Java计算幂级数近似in(x)使用以下公式: 我是用while循环来做的,我似乎无法100%正确地得到sin近似值。你知道我哪里出错了吗? 这目前给了我以下输出:
校验者: @FontTian @numpy 翻译者: @程威 这个子模块包含与某些 kernel 对应的特征映射的函数,这个会用于例如支持向量机的算法当中(see 支持向量机)。 下面这些特征函数对输入执行非线性转换,可以用于线性分类或者其他算法。 与 kernel trick 相比,近似的进行特征映射更适合在线学习,并能够有效 减少学习大量数据的内存开销。使用标准核技巧的 svm 不能有效的适用
为了让大家直观地感受这一系列过程是如何近似模拟一种语言的,我们构造了英文的一些典型近似序列,并给出如下。在所有情况下,我们假定“字母表”中有27个符号——26个字母和一个空格。 零阶近似(符号的选择相互独立,概率相等)。 XFOML RXKHRJFFJUJ ZLPWCFWKCYJ FFJEYVKCQSGHYD QPAAMKBZAACIBZLHJQD。 一阶近似(符号的选择相互独立,但其概率与英文文