我想生成可再现的随机数,表示 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/