【问题标题】:Define an equality operator for floats with tolerance: (~=)为具有容差的浮点数定义相等运算符:(~=)
【发布时间】:2014-05-11 11:59:59
【问题描述】:

我目前有这个功能:

let equal x1 x2 = abs(x1 - x2) < tolerance

检查是否有一定的公差,因为我们正在检查浮点数,所以它们不会完全相等。

我怎样才能使它成为浮点数上的二进制中缀运算符,例如 x ~= y?

我试过了:

type System.Double with
static member (~-) (this, that: System.Double) =
    equal this that

然后它说我扩展方法不能提供运算符重载

然后我尝试从 System.Double 继承并做同样的事情:

type double() =
inherit System.Double()
static member (==) (this, that: double) =
    equal this that

但它抱怨我不能从“密封”类型继承

然后,您将如何使用此运算符重载定义一个 double 类型,它的作用类似于普通 System.Double(F# 中的“float”)但使用此运算符重载方法?

【问题讨论】:

    标签: f# operator-overloading


    【解决方案1】:
    let (=~) x1 x2 = abs(x1 - x2) < tolerance
    

    【讨论】:

    • 谢谢!不过,显然我不能使用该运算符。许多其他运算符也不起作用,所以我不得不改用“==”
    • 奇怪。对我来说很好。确保tolerancefloat。你使用的是什么版本的 F#?如果您将上述定义发送给 FSI 并使用它,您会得到什么?
    • @Mau 我可以在这里准确地告诉你chat.stackoverflow.com/rooms/52465/f-invalid-infix-operator
    • @Mau 是的,“tolerance”是一个浮点数,我使用的是 VS 2013。如果我使用 ~=,它认为它是一个前缀运算符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多