也许对此有一个非常逻辑的解释,但我似乎无法理解为什么种子0和2,147,483,647产生相同的"随机"序列,使用.NET的随机类(系统).
快速代码示例:
var random1 = new Random(0);
var random2 = new Random(1);
var random3 = new Random(int.MaxValue); //2,147,483,647
var buffer1 = new byte[8];
var buffer2 = new byte[8];
var buffer3 = new byte[8];
random1.NextBytes(buffer1);
random2.NextBytes(buffer2);
random3.NextBytes(buffer3);
for (int i = 0; i < 8; i++)
{
Console.WriteLine("{0}\t\t{1}\t\t{2}", buffer1[i], buffer2[i], buffer3[i]);
}
Run Code Online (Sandbox Code Playgroud)
输出:
26 70 26
12 208 12
70 134 76
111 130 111
93 64 93
117 151 115
228 228 228
216 …Run Code Online (Sandbox Code Playgroud) 我得到一个.C文件,我不知道它做了什么,我应该发现...运行后我认为它是某种随机数发生器,但我完全不知道...我如果你们中的任何一个人见过在rf函数中实现的算法,那就是徘徊:
/* ===========================================HEADERS=============================================== */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* ============================================INIRAN================================================ */
typedef struct {
int seme;
} iniran;
/* ==============================================RF================================================== */
float rf(int *idum){
static int iff=0;
static int inext, inextp, ma[55];
int mj, mk;
int i, k, ii;
float ret_val;
if (*idum<0 || iff==0) {
iff=1;
mj=161803398 - abs(*idum);
mj %= 1000000000;
ma[54]=mj;
mk=1;
for (i=1; i<=54; ++i){
ii=(i*21)%55;
ma[ii-1]=mk;
mk=mj-mk;
if (mk<0) {
mk += 1000000000;
}
mj= ma[ii-1];
}
for(k=1; k<=4; ++k) { …Run Code Online (Sandbox Code Playgroud)