使用字节表示对浮点值进行排序

Sorting floating-point values using their byte-representation

如果有一段8字节的数据,写入一个双精度浮点值,在什么情况下数值比较和字节字典序比较一致?

当前理论:positive, big-endian

我相信如果数字是正数,并且表示是大端,那么浮点值的数字排序将匹配字节的字典顺序。

这个想法是它会首先对指数进行排序,然后对尾数进行排序。即使是 "denormalized" IEEE 代表也不应该造成任何问题。

这是真的吗?

(我使用的是 Node 的 Buffer::writeDoubleBE,但这不重要。)

跟进

我认为一个简单的修改可以将其扩展到负数:XOR 所有正数与 0x8000... 和负数与 0xffff...。这应该翻转两者的符号位(因此负数首先出现),然后反转负数的顺序。有人看到这有问题吗?

你的方法:

I think a simple modification can extend this to negative numbers: XOR all positive numbers with 0x8000... and negative numbers with 0xffff.... This should flip the sign bit on both (so negative numbers go first), and then reverse the ordering on negative numbers. Does anyone see a problem with this?

绝对是答案。 此外,例如,在 dBase 和克隆中使用它来组织对浮点列的排序,我想它会被更新的数据库生成。

此外,根据 IEEE-754 的二进制表示,它与 "total order" 相同。 (但不是小数,后者要复杂得多。)

更新:正如@Sneftel 所建议的:在转换为位串之前,您会发现用 +0 替换 -0 很有用。

如果想让基数排序保持稳定的排序算法,就必须将负数部分的所有相等元素的子部分再次交换一次,因为交换负数时,原来的稳定排序是稳定的顺序.

副教授。教授 阿恩毛斯, 奥斯陆大学