在 Rust 中实现 `Eq` 的浮点类型

问题描述 投票:0回答:1

在 Rust 中,是否有一个实现

f32
f64
/
Eq
版本?
我认为
f32
/
f64
未实施
Eq
的唯一原因是
NaN != NaN

这种类型的潜在行为方式:

  1. 该类型可以为该类型创建
    NaN == NaN
    ,这将非常有用,因为我经常假设
    a == a
    始终为真。
  2. 另一种方法是完全禁止该类型中的
    NaN
    ,这样就不存在可能与其自身不相等的
    NaN

理想情况下,有一种方法可以通过使用后缀(类似于

2.3_f32
)来使用该类型,但我认为这是不可能的。

rust floating-point nan equality-operator
1个回答
0
投票

从 Rust 1.62.0 开始,您可以使用 total_cmp()

f32
f64
 方法。它们本身不是一个类型,但如果您愿意,您可以在它们之上构建一个类型。

或者您可以使用

ordered-float
板条箱。它提供
NotNan
OrderedFloat
类型,每种类型都与您描述的一种行为匹配。

© www.soinside.com 2019 - 2024. All rights reserved.