我正在搜索一个哈希函数,它将任何整数作为输入(正或负,但如果这使得它更容易被约束到int范围),并返回介于-1和1之间的实数.是否有这样的函数,或从另一个哈希函数构建它的任何明显方法?
该功能不必是安全的,只要其足够"随机"即可.如果存在C/C++实现,则奖励积分.
这是一个快速破解来证明:
#include<stdio.h>
double inthash(unsigned int key)
{
key += (key << 12);
key ^= (key >> 22);
key += (key << 4);
key ^= (key >> 9);
key += (key << 10);
key ^= (key >> 2);
key += (key << 7);
key ^= (key >> 12);
return key / 2147483647.5 - 1;
}
void main()
{
printf("%f\n", inthash(1));
printf("%f\n", inthash(2));
printf("%f\n", inthash(3));
printf("%f\n", inthash(10000));
printf("%f\n", inthash(10001));
}
Run Code Online (Sandbox Code Playgroud)
输出:
0.368240
-0.263032
-0.892034
-0.428394
-0.150713
Run Code Online (Sandbox Code Playgroud)