哈希函数返回介于-1和1之间的值

Ben*_*nno 2 algorithm hash

我正在搜索一个哈希函数,它将任何整数作为输入(正或负,但如果这使得它更容易被约束到int范围),并返回介于-1和1之间的实数.是否有这样的函数,或从另一个哈希函数构建它的任何明显方法?

该功能不必是安全的,只要其足够"随机"即可.如果存在C/C++实现,则奖励积分.

aio*_*obe 5

  1. 选择整数的任何哈希函数,例如boost :: hash,
  2. 通过除以整数最大值的一半将结果归一化为2
  3. 减去1.

这是一个快速破解来证明:

#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)