java - 从任何数字生成确定性随机数
问题描述
从一个数字 x,我想要一个函数来获得一个随机数 y,均匀分布。对于相同的 x,函数应该返回相同的 y。
我试过了:
float func(int x) {
return new Random(x).nextFloat();
}
但显然只有种子 Random 提供的数字序列是均匀分布的,而不是第一个值。这可能吗?
解决方案
首先,请注意 int 和 float 在 Java 中都是 32 位数据类型。所以你所要求的本质上是一个好的散列函数。如果您希望随机函数为 1:1,那么这将成为伪随机排列。所以选择你最喜欢的哈希函数,然后将这些位重新解释为浮点数(而不是强制转换)
public float f(x) {
// Pick your favorite hash function here
int hash = (int)(x * 2654435761L) // Fibonacci hash
return Float.intBitsToFloat(hash);
}
推荐阅读
- css - 限制下载按钮,只有登录用户才能查看按钮
- mysql - MYSQL 中的 date_trunc('minute', timestamp) 等价物
- npm - 无法使用“=”登录 cross-env-shell
- python-3.x - Python 异步 Websocket 方法返回 Future
- python - 我正在尝试创建一个猜数游戏,但是当我运行它时,它会继续运行 while 循环并且不会中断
- flutter - 对 BorderRadius 感到困惑
- structure - Visual Studio 中的维度结构选项卡在哪里?
- communication - 如何为非 subnero 调制解调器编写调制解调器驱动程序?
- windows - 使用 for 循环列出所有 mp4 文件并选择一个
- javascript - 如何从客户端获取firebase存储json文件