为什么锈没有实现通过奥德特征为F64和F32全序?

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

虽然锈的所有整数类型实现Ord强调总排序,浮点类型仅实现PartialOrd。这意味着,有可能是其无法比拟的浮点值。这似乎是难以消化的,因为浮点数字可以被看作是近似而它们恰巧是一个完全有序的实数集。即使加正,负无穷大的保持实数集的全序。为什么这样奇怪的选择拉斯特?

这一限制意味着一个通用的排序/搜索算法只能假设在数字部分排序。 IEEE 754标准似乎提供了total ordering predicate

为NaN的这么多的通用代码的问题?

sorting rust floating-point partial-ordering
1个回答
14
投票

你的问题是,恰恰?你问的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谓语单,快速的指令实现的操作。编程语言的语言映射到结构的快速指示,离开任何人谁格外需要totalOrder从库中挑选,或甚至定义它自己。

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