Hash 是否存在除+;之外计算为相同值的非规范化浮点;0/-0?

Hash 是否存在除+;之外计算为相同值的非规范化浮点;0/-0?,hash,floating-point,64-bit,ieee-754,floating-point-conversion,Hash,Floating Point,64 Bit,Ieee 754,Floating Point Conversion,散列浮动 我想对散列函数进行浮点运算(单数、双数等)。 我希望hash函数为实际上相同但具有不同二进制表示的事物生成相同的hash 因此,+0/-0应该标准化。 多个NaN应合并为一个表示。 与+Inf相同(与-Inf不同),等等 问题 除了+0/-0之外,是否存在非规范化的浮点值,它们真的转换为相同的离散值,或者我可以按原样散列它们的二进制表示,而不用担心为相同的值生成不同的散列 奖励问题:如果有,除了使用frexp,将这些非规范化恢复为唯一表示法的最快方法是什么? (最好在X64 SSE2组

散列浮动
我想对散列函数进行浮点运算(单数、双数等)。
我希望hash函数为实际上相同但具有不同二进制表示的事物生成相同的hash

因此,+0/-0应该标准化。
多个NaN应合并为一个表示。
与+Inf相同(与-Inf不同),等等

问题
除了+0/-0之外,是否存在非规范化的浮点值,它们真的转换为相同的离散值,或者我可以按原样散列它们的二进制表示,而不用担心为相同的值生成不同的散列

奖励问题:如果有,除了使用
frexp
,将这些非规范化恢复为唯一表示法的最快方法是什么?
(最好在X64 SSE2组件中回答,但C也可以)

出于性能方面的原因,我希望在将浮点输入哈希之前尽可能少地做准备工作。我不在乎兼容性

除了+0/-0之外,是否存在非规范化的浮点值,它们真的转换为相同的离散值,或者我可以按原样散列它们的二进制表示,而不用担心为相同的值生成不同的散列

不存在从表示到其他“真实”价值的转换。只有IEEE 754等式,这是一种等价关系,但使某些具有不同表示形式的值相等+0.0和-0.0是唯一具有相同不同表示形式的浮点值

您不需要对NaN的许多表示做任何特殊的处理,所有的NaN都是不同的(对于IEEE 754等式),即使它们具有相同的表示。因此,nan不需要具有相同的散列。NaN的相同表示甚至不需要与自身具有相同的哈希

除了+0/-0之外,是否存在非规范化的浮点值,它们真的转换为相同的离散值,或者我可以按原样散列它们的二进制表示,而不用担心为相同的值生成不同的散列

不存在从表示到其他“真实”价值的转换。只有IEEE 754等式,这是一种等价关系,但使某些具有不同表示形式的值相等+0.0和-0.0是唯一具有相同不同表示形式的浮点值


您不需要对NaN的许多表示做任何特殊的处理,所有的NaN都是不同的(对于IEEE 754等式),即使它们具有相同的表示。因此,nan不需要具有相同的散列。NaN的相同表示甚至不需要与自身具有相同的哈希。

请注意,在IEEE754中,没有一个NaN。。。有“许多”南。在32位浮点中,除了NaN和+-0的问题外,NaN可能有24位有效负载(1位符号和23位有效负载),IEEE754浮点的所有值都是不同的,如果转换为uint32_t/uint64_t,如果endianness是相同的,严格地说对于您的奖金问题,应该编写一种语言。。。考虑到您对frexp的引用,您可能指的是C.@xanatos No,实际上是x64 assembly。如果您在基于IEEE 754等式的哈希表中使用NaN作为键,您可能做错了什么。不管怎样,NaN的散列并不重要,因为NaN!=楠。您可以对不同的NaN使用不同的哈希,也可以对“相同”的NaN使用不同的哈希,哈希函数仍然与IEEE 754等式兼容。。。有“许多”南。在32位浮点中,除了NaN和+-0的问题外,NaN可能有24位有效负载(1位符号和23位有效负载),IEEE754浮点的所有值都是不同的,如果转换为uint32_t/uint64_t,如果endianness是相同的,严格地说对于您的奖金问题,应该编写一种语言。。。考虑到您对frexp的引用,您可能指的是C.@xanatos No,实际上是x64 assembly。如果您在基于IEEE 754等式的哈希表中使用NaN作为键,您可能做错了什么。不管怎样,NaN的散列并不重要,因为NaN!=楠。可以对不同的NaN使用不同的哈希,也可以对“相同”的NaN使用不同的哈希,哈希函数仍然与IEEE 754等式兼容。在不同时间对不同内容进行值哈希可能会破坏哈希表的不变量。@tmyklebu我想说的是,正是那些不等于自身的键破坏了哈希表的不变量。在不同时间对不同内容进行值哈希可能会破坏哈希表的不变量破坏哈希表的不变量。@tmyklebu我想说的是,破坏哈希表不变量的是那些不等于自身的键。