相关疑难解决方法(0)

两种不同的种子产生相同的"随机"序列

也许对此有一个非常逻辑的解释,但我似乎无法理解为什么种子02,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)

.net c# random integer

21
推荐指数
1
解决办法
953
查看次数

我需要帮助才能找出这个算法的作用

我得到一个.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)

c random algorithm math

0
推荐指数
1
解决办法
100
查看次数

标签 统计

random ×2

.net ×1

algorithm ×1

c ×1

c# ×1

integer ×1

math ×1