java - 在 Java 中使用整数 vector 作为种子生成随机数

标签 java random numbers random-seed

我想生成可再现的随机数,表示 3 维空间中不同点的数量,例如

double draw = rand(int seed, int x, int y, int z)

我希望相同的输入始终产生相同的平局。我不想提前生成所有值,因为会太多。

我希望不同位置的抽奖是独立的。我还希望不同种子的相同位置的抽签是独立的。这排除了取四个参数的总和或乘积,并将其用作种子。

最佳答案

怎么样

return new Random(seed ^ x ^ y ^ z).nextDouble();

(因为构造函数的种子参数实际上是 64 位,你可以获得更好的“传播”,比如在 xor:ing 之前将你的两个整数向上移动 32 位)


另一个简单的解决方案是做类似的事情

Random rnd = new Random(seed);
rnd.setSeed(rnd.nextLong() ^ x);
rnd.setSeed(rnd.nextLong() ^ y);
rnd.setSeed(rnd.nextLong() ^ z);
return rnd.nextDouble();

关于java - 在 Java 中使用整数 vector 作为种子生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5929859/

相关文章:

java - JForex 代码编辑器颜色更改

c - rand() 不产生随机 [c]

algorithm - 是否有可能根据有限的伪随机数序列获得种子的近似值?

javascript - jquery中如何计数,数字加减

ios - 如何在我的展示标签上显示所有数字? - 基本计算器

java - 如何在多个类中抽象出具有不同返回类型的相同方法

java - 从 Java 访问 MongoDB

java - 不同的输出_网络

r - 如何将字符串中的字母转换为R中的数字

algorithm - 你从这个 splinter 的随机洗牌中得到什么分布?