C# 返回负数的斐波那契随机数生成器

C# 返回负数的斐波那契随机数生成器,c#,algorithm,C#,Algorithm,我尝试使用以下公式实现一个减法滞后斐波那契随机数生成器: 这表明对于模和余数的定义并没有完全一致的意见。然而,模运算通常采用除数的符号,而余数通常采用被除数的值。例如,见: 发现−b mod N,只需将N添加到-b,直到数字介于0和N之间 所以-5 mod 3是1,而-5 rem 3是-2 记住这个定义,C#是一个余数运算符,而不是模运算符 假设m是一个正数,我们可以利用余数来计算模运算。对于正m: a mod m=((a rem m)+m)rem m 因此,我们可以在这里的公式中使用它,并将其

我尝试使用以下公式实现一个减法滞后斐波那契随机数生成器: 这表明对于模和余数的定义并没有完全一致的意见。然而,模运算通常采用除数的符号,而余数通常采用被除数的值。例如,见:

发现−b mod N,只需将N添加到-b,直到数字介于0和N之间

所以-5 mod 3是1,而-5 rem 3是-2

记住这个定义,C#是一个余数运算符,而不是模运算符

假设
m
是一个正数,我们可以利用余数来计算模运算。对于正m:

a mod m=((a rem m)+m)rem m

因此,我们可以在这里的公式中使用它,并将其写成:

randomNumber = (((firstElement - secondElement) % m) + m) % m;

randomNumber=((第一元素-第二元素)%m)+m)%m
这里可能出现负数是有道理的,因为并不是说
X[n-f]
总是大于
X[n-k]
。你需要一个
mod
而不是
rem
,我想,所以
(((X[n-f]-X[n-k])%m)+m
@WillemVanOnsem你暗示的是一个乘法生成器,我需要做一个减法运算,这就是-。但是,我读了很多文章,我找不到减法运算是否也应该返回负数。如果它在构造函数中被重新赋值,为什么要将
n
初始化为
0
randomNumber=(firstElement-secondElement)%m
您没有进行任何验证,验证的
firstElement
大于
secondElement
。如果你不想要负数,那么你可以得到绝对值:
randomNumber=Math.Abs(firstElement-secondElement)%m@WillemVanOnsem很抱歉,我不明白你的意思,为什么%m)+m)%m当函数为Xn=(X(n-j)-X(n-k))mod m时非常感谢你的清楚解释。这解决了我的问题。