使用丢弃策略的滞后斐波那契生成器
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 之间。
我正在尝试实现 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 之间。