Random 哈希质量在位上不是常数

Random 哈希质量在位上不是常数,random,murmurhash,Random,Murmurhash,我正试图从32位输入推导出一个伪随机32位值 为此,我使用这个杂音散列: uint32_t murmur(uint32_t key, uint32_t seed) { uint32_t k = ( key ^ seed ) * 0x5bd1e995; k = k ^ (k>>24); return k; } 令我惊讶的是,与高16位相比,低16位的随机性质量有很大的增量 如果我使用最低的16位来生成随机单位向量,我会在球体上得到清晰的

我正试图从32位输入推导出一个伪随机32位值

为此,我使用这个杂音散列:

uint32_t murmur(uint32_t key, uint32_t seed)
{
        uint32_t k = ( key ^ seed ) * 0x5bd1e995;
        k = k ^ (k>>24);
        return k;
}
令我惊讶的是,与高16位相比,低16位的随机性质量有很大的增量

如果我使用最低的16位来生成随机单位向量,我会在球体上得到清晰的图案,极点和子午线可见

如果我使用最高的16位来生成随机单位向量,我会得到更好的点分布

这是杂音的根本问题,还是我用错了

我输入的关键是[0,1,…N]乘以大素数2521008887

对于3D向量的x/y/z坐标,我使用随机选择的种子0xb7295179、0x18732214、0x9531f133


0xffff0000位的随机性会被直观地检测出来。0x0000ffff位的随机性不适用。

如何使用它来生成单位向量?我取两个随机向量[-1..1,-1..1,-1..1],并使用最短的一个进行规格化。它仍然对下图中可见的“立方体角落”有微弱的偏向,但这太微妙了,我可以接受。特别是如果你把它和上面的图像比较,你如何用它来生成单位向量?我取两个随机向量[-1..1,-1..1,-1..1],然后用最短的一个来归一化。它仍然对下图中可见的“立方体角落”有微弱的偏向,但这太微妙了,我可以接受。特别是如果你把它和上面的图片进行比较。