java - 创建新的随机数与使用相同的随机数

标签 java random normal-distribution random-seed

我正在尝试分发系统,并且需要使用 Random Java 类中的 nextGaussian()。我发现打破唯一种子创建的数据依赖性的唯一方法是使用多个种子,从而创建多个随机数。

让我们忘记我的问题的背景,我只想知道与仅使用一个实例相比,使用多个随机实例的归一化效果如何。换句话说...与 genSame 相比,这个 genNew 的随机性如何?

代码:

public double[] genNew(int lim, long seed)
{
    double[] rand = new double[lim];
    for(int i = 0; i < lim; i++)
    {
        //A random for each iteration.
        Random r = new Random(i*seed);
        rand[i] = r.nextGaussian();
    }
    return rand;
}

public double[] genSame(int lim, long seed)
{
    double[] rand = new double[lim];
    //A random for all iterations
    Random r = new Random(seed);
    for(int i = 0; i < lim; i++)
        rand[i] = r.nextGaussian();
    return rand;
}

当我将这两个数组应用于我的代码时,我得到的结果非常不同。我只是无法解释为什么。

编辑:我知道这不会生成相同的数组,只是当使用大量标准化随机数来计算数字时,两个数字应该接近(因为标准化),但事实并非如此。

最佳答案

我找到了一种生成准确数字并打破数据依赖性的方法。

我不明白为什么这个因素起作用,但它确实起作用。我偶然发现了它,并且对它进行了近一百万次测试,并且一直工作没有失败。

如果有人理解为什么这样做,请告诉:

Random r = new Random(seed * 43112609)

这个数是素数。这是我唯一的线索,但我仍然不明白它为什么起作用。

关于java - 创建新的随机数与使用相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201040/

相关文章:

java - setOnClickListener android 工作室

javascript - 如何保证循环中随机出现一定次数?

fortran - 使用拒绝方法创建正态分布会产生错误的前因子

r - Julia 相当于 R 的 qnorm()?

java - 使用 Paypal API 问题

java - 对一组 jButton 实现 ActionListener 时出现问题

java - 符合给定标准的 Scala/Java ORM

ios - 使用后从数组中删除元素 - Swift

c++ - 从包含 n 个元素的 vector 中随机选择 m 个元素

c++ - 如何在密度函数的特定值处有效地绘制二维正态分布的等值线?