1
5
我建议对gamecat代码进行以下改进:
这考虑了双精度值的所有位。 (注释不适用于代码) |
2
2
如果要将double映射为整数,可以使用变量记录:
注意,这是一个位拷贝,没有对值的解释。 另一个(类似于肮脏的把戏,是使用绝对变量:
|
3
0
实际上没有必要这样做,因为gethashcode的默认值已经返回了一个保证对每个对象都是唯一的数字:对象的内存地址。此外,如果更改对象包含的数据,则默认哈希值不会更改。 假设您有一个包含值为3.5的double的对象,您将其散列并放入字典中,得到的散列代码是12345678。你还有其他的东西,它有一个引用,这个双字段被改变了,现在它的值是5.21。下次尝试计算散列值时,散列代码现在为23456789,查找将失败。 除非你能保证永远不会发生这种情况,而且你有一个很好的理由不使用内存地址,否则你最好的选择就是保持gethashcode不变。(如果没有坏,就不要修。) |
4
0
我猜想Java的东西可以在Delphi中实现,像这样:
背后的想法是降低双精度值的精度,以匹配整数的二进制大小(size of(single)=size of(integer))。如果您的值可以在不发生冲突的情况下以单精度表示,这将提供一个好的哈希值。 编辑:由于类型转换无法在我的D2009中编译,所以我修改了变体记录解决方案。 |
5
0
对双数据使用CRC32,因为 异或 是邪恶的。
|
Jahongir Rahmonov · 计算文件的校验和 6 年前 |
Lev Knoblock · 类哈希函数 6 年前 |
Sazzad Hissain Khan · 算法-在二维矩阵中搜索 6 年前 |
Asur · 如何在PHP中同时使用多种算法对文件进行哈希? 6 年前 |
OofYeetMcGee · 实现PBKDF2 6 年前 |
yibs · 如何在Perl中计算csv中具有相同id的项目数 6 年前 |