random - 散列质量在位上不是恒定的
问题描述
我正在尝试从 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 位生成随机单位向量,我会得到更好的点分布。
这是 MURMUR 的一个基本问题,还是我用错了?
我提供给它的关键是值 [0,1,.. N] 乘以大素数 2521008887。
对于 3D 矢量的 x/y/z 坐标,我使用随机选择的种子 0xb7295179、0x18732214、0x9531f133。
0xffff0000 位的随机性直观地检查出来。0x0000ffff 位的随机性不会。
解决方案
推荐阅读
- asp.net-mvc - 使用 Firebase Admin SDK 向移动设备发送通知
- api - Binance限价卖空API:保证金/订单(卖出)还是保证金/贷款?
- python - 如何修复此列表索引超出范围错误?
- c++ - CMake 和 GitHub Actions - GitHub Actions 上 CMake 库的 Windows 构建未将库链接到测试套件
- google-reporting-api - Google Reports API 返回的项目大小小于 maxResults 参数
- ios - 错误:0909006C:PEM 例程:get_name:没有起始行
- android-recyclerview - 如何在 android 中设置 SimpleExoPlayerView 的最大高度?
- java - 有没有办法读取 Scanner 类 java 中的分隔符?
- android - targetSdkVersion 为 30 时命令执行失败(Android R)
- css - 如何使标题跨越网格中的两列项目?