哈希浮动
我想要一个哈希函数浮点数(单打,双打等)
我希望哈希函数为实际相同但具有不同二进制表示的事物生成相同的哈希值。
因此+ 0 / -0应该归一化 许多NaN应合并为一个表示形式 + Inf(与-Inf不同)等相同
问题
除了+ 0 / -0之外,是否存在非规范化浮点数,它实际上转换为相同的离散值,或者我可以按原样哈希它们的二进制表示,而不用担心为相同的值生成不同的哈希值?
奖金问题:如果有,除了使用frexp
之外,将这些非正规恢复到唯一表示的最快方法是什么?
(最好在X64 SSE2组件中回答,但C也可以)。
出于性能原因,我希望尽可能少做准备工作,然后再将我的浮点数提供给哈希值。我不关心兼容性。
答案 0 :(得分:4)
除了+ 0 / -0之外,是否存在非规范化的浮点数,它实际上转换为相同的离散值,或者我可以按原样哈希它们的二进制表示,而不必担心为相同的值生成不同的哈希值?
没有从表示转换为其他可能是“真实”价值的东西。只有IEEE 754等式,这是一个等价关系,但是使一些具有不同表示的值相等。 +0.0和-0.0是唯一具有相同的不同表示的浮点值。
您不需要对NaN的许多表示做任何特殊处理,所有NaN都不同(对于IEEE 754相等),即使它们具有相同的表示。因此,NaN不需要具有相同的散列。 NaN的相同表示甚至不需要具有与其自身相同的散列。