使用丢弃策略的滞后斐波那契生成器

Lagged Fibonacci generator using a discarding strategy

我正在尝试实现 Lagged Fibonacci 生成器,但使用的是丢弃策略。我要遵循这些准则:

第 1 步:Return 从您的 RNG 生成的接下来的 127 个数字中随机数

第 2 步:丢弃从 RNG 生成的接下来的 997 个号码

第 3 步:转到第 1 步。

问题是有时生成的值会弹出关于 'int randomNumber = array[Next(127)];'

部分数组越界的错误

初始值为:

Random rand = new Random();
int[] array = new int[6000];
int j = 83;
static int k = 258;
int m = 2;
int n = k;
double randomNumber = 0;

丢弃方法的代码如下:

public int NextUsingDiscarding(int maxValue)
{
    try
    {
        int[] array = new int[127];
        for (int i = 0; i < array.Length - 1; i++)
        {
            array[i] = Next(maxValue);
        }

        int randomNumber = array[Next(127)];

        for (int i = 0; i < 127 + 997; i++)
        {
            Next(maxValue);
        }

        return randomNumber;
    }
    catch
    {
        return -1;
    }
}

和数字生成器:

public int Next(int maxValue)
{
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = rand.Next(maxValue);
    }

    int firstElement = array[n - j];
    int secondElement = array[n - k];

    randomNumber = (firstElement + secondElement) % Math.Pow(m, 32);

    array[n] = (int)randomNumber;

    return (int)randomNumber % (maxValue + 1);
}

Next returns 介于 0 和 maxvalue 之间的值,此处称为 127。但是您的数组的索引介于 0 和 126 之间。