Sorting Rust为什么不通过f64和f32的Ord特性实现总订购?
Rust中的所有整数类型都实现了强调全排序的功能,而浮点类型只实现了。这意味着可能存在无法比较的浮点值。这似乎很难理解,因为浮点数可以被认为是实数的近似值,而实数恰好是一个完全有序的集合。甚至正负无穷的加法也能使实数集保持完全有序。为什么要选择生锈 此限制意味着通用排序/搜索算法只能假定数字的偏序。IEEE754标准似乎提供了一种新的解决方案Sorting Rust为什么不通过f64和f32的Ord特性实现总订购?,sorting,rust,floating-point,partial-ordering,Sorting,Rust,Floating Point,Partial Ordering,Rust中的所有整数类型都实现了强调全排序的功能,而浮点类型只实现了。这意味着可能存在无法比较的浮点值。这似乎很难理解,因为浮点数可以被认为是实数的近似值,而实数恰好是一个完全有序的集合。甚至正负无穷的加法也能使实数集保持完全有序。为什么要选择生锈 此限制意味着通用排序/搜索算法只能假定数字的偏序。IEEE754标准似乎提供了一种新的解决方案 NaN在泛型代码中有这么多问题吗 确切地说,你的问题是什么?您是在问NaN是否存在,还是可以通过意外或自愿计算获得?是的,它可以,它可以。当提供的顺序不是
NaN在泛型代码中有这么多问题吗 确切地说,你的问题是什么?您是在问NaN是否存在,还是可以通过意外或自愿计算获得?是的,它可以,它可以。当提供的顺序不是总顺序时,需要键的总顺序的数据结构类型会完全崩溃。您甚至不希望一个异常值与它本身不同,因为它会破坏结构的不变量,意味着从此以后任何事情都可能发生。不过,只要没有问题,NaN就不应该被认为是无害的
IEEE 754对普通比较运算符的定义
我不知道total order谓词没有在硬件中实现。@ShaileshKumar首先比较值(<+)的符号,然后,如果值具有相同的符号,则将其他位与表示位上的整数比较指令进行比较。
if (!(x <= MAX)) { // NaN makes this condition true
error();
}
if (!(x >= MIN)) { // NaN makes this condition true
error();
}