Rust中的所有整数类型都实现了Ord,它强调总排序,而浮点类型只实现了PartialOrd.这意味着可能存在无法比较的浮点值.这似乎很难理解,因为浮点数可以被认为是实数的近似值,而实数恰好是一个完全有序的集合.甚至正负无穷的加法也能使实数集保持完全有序.为什么 Select Rust ?

这个限制意味着一个通用的排序/搜索算法只能假设数字的偏序.IEEE 754标准似乎规定了total ordering predicate.

NaN在泛型代码中有这么多问题吗?

推荐答案

你的问题是什么?你是在问NaN是否存在,还是可以通过意外或自愿计算得到?是的,确实如此,而且可以.当提供的顺序不是总顺序时,需要密钥的总顺序的数据 struct 会完全崩溃.你甚至不希望一个异常值与它本身不同,因为它会 destruct struct 的不变量,意味着从此以后任何事情都可能发生.只要没有问题,NaN就不应该被认为是无害的,尽管that has been tried in other languages.

IEEE 754对普通比较运算符<<=……的定义使它们在一般情况下非常有用,如果不需要总阶数的话.特别是,很容易写入条件,以便将NaN输入发送到错误分支:

if (!(x <= MAX)) { // NaN makes this condition true
  error();
}

if (!(x >= MIN)) { // NaN makes this condition true
  error();
}

由于<<=非常有用,它们是在现代处理器中作为单个快速指令实现的操作.IEEE 754中的totalOrder谓词通常不在硬件中实现.编程语言将快速指令映射到语言中的 struct ,并让任何异常需要totalOrder的人从库中 Select 它,甚至自己定义它.

Rust相关问答推荐

属性宏修改派生宏的派生实现

trait 中self 的显式生命周期似乎导致E0499无法在循环中多次borrow * emits 器作为可变的

将已知大小的切片合并成一个数组,

为什么幻影数据不能自动推断?

无法从流中读取Redis请求

允许 rust 迹 struct 条目具有多种类型

在使用粗粒度锁访问的数据 struct 中使用 RefCell 是否安全?

Rust LinkedList 中的borrow 判断器错误的原因是什么?

中文优化标题:跳出特定循环并返回一个值

如何将这些测试放在一个单独的文件中?

`移动||异步移动{...}`,如何知道哪个移动正在移动哪个?

Rust 引用元组和引用元组

Rust 将特性传递给依赖项

为什么我可以同时传递可变和不可变引用?

仅当满足外部条件时如何添加到 actix web 的路由

如何解析 Rust 中的 yaml 条件字段?

如何为返回正确类型的枚举实现 get 方法?

有没有办法阻止 rust-analyzer 使非活动代码变暗?

有没有办法隐藏类型定义?

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?