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

问题描述 投票:4回答:2

如果有一个8字节的数据部分并写入一个双精度浮点值,在什么条件下通过数字比较和字典的字典排序比较一致?

Current theory: positive, big-endian

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

这个想法是它首先对指数进行排序,然后对尾数进行排序。即使是“非规范化”的IEEE表示也不应该引起任何问题。

这是真的?

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

Follow-up

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

sorting floating-point ieee-754
2个回答
7
投票

你的方法:

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

绝对是答案。此外,例如,它在dBase和克隆中用于组织浮动列的排序,我猜它接着是更新的DB代。

此外,它与根据IEEE-754的二进制表示的“总顺序”相同。 (但不是十进制的,后者要复杂得多。)

更新:正如@Sneftel建议的那样:你可以在转换为位串之前找到用-0替换-0作为有用的东西。


0
投票

如果你想让Radix排序保持稳定的排序算法,你必须再次在负数部分交换相等元素的所有子部分,因为当你交换负数时,原始的稳定排序是稳定的。

协会。奥斯陆大学Arne Maus教授

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