线性同余随机数go语言 用线性同余法生成随机数序列

怎么实现rand

rand(产生随机数)

发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及成都软装设计等,在成都网站建设网络营销推广、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。

表头文件: #includestdlib.h

定义函数 :int rand(void)

函数说明 :

因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

返回值:

返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。

0~RAND_MAX每个数字被选中的机率是相同的。

范例:

/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考

srand()*/

#includestdlib.h

main()

{

int i,j;

for(i=0;i10;i++)

{

j=1+(int)(10.0*rand()/(RAND_MAX+1.0));

printf("%d ",j);

}

}

执行:

9 4 8 8 10 2 4 8 3 6

9 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数

如何用线性同余法生成随机数序列

class RandGentor

{

int rk;

public:

RandGentor() { srand(0); }

void srand(int nRandSeed)

{

rk = nRandSeed; // 设置随机种子

}

unsigned short rand()

{

rk = 25173 * rk-1 + 13849 ;

return rk % 100; // 生成一到两位随机数

}

}

如何产生“随机”,但也“独一无二”的数字

1. 优先:如果数字是保证永不重复,这不是很随机的。 第二:有很多的PRNG算法。 更新: 第三:有一个IETF的RFC的UUID(什么MS调用的GUID),但你应该认识到,(U|G)的UID不加密保护,如果这是你的关注。 更新2: 如果你想喜欢这种在生产代码(不只是为自己的熏陶),请使用预先存在的库。这是代码的那种几乎保证有微妙的bugs,如果你之前(或者即使你有)从来没有做过。 更新3: 下面是文档的.NET的GUID

2. 有很多方法可以生成随机数。这是一个系统/库调用一个伪随机数发生器的seed照你已经描述。 但是 CodeGo.net,也有越来越随机数的其他方式涉及专门的硬件来获得真正的随机数。我知道扑克网站这种硬件的。这是非常有趣的阅读他们是如何做到这一点。

3. 大多数随机数发生器有办法“随机”重新初始化seed值。 (称为随机化)。 如果这是不可能的,你可以将系统时钟初始化seed。

4. 你这个代码示例: 或者,您这本书: 但是,不要自己动手,用现有的库。你不能成为优先人做到这一点。

5. 特别是关于Java的:java.util.Random使用线性同余发生器,这不是很好java.util.UUID#randomUUID()用途java.security.SecureRandom,适用于各种加密安全随机数据生成器的界面-默认是基于SHA-1的,我相信。 的UUID / GUID是不一定随机 人们很容易找到那些比好得多的RNG的java.util.Random如Mersenne扭曲或乘用携带

6. 我知道你正在寻找一种方法来生成随机的C#。如果是的话,RNGCryptoServiceProvider的是你在找什么。 [编辑] 如果产生一个相当长的RNGCryptoServiceProvider的数目,它很可能是唯一的,但不存在供货保证。从理论上讲,真正的随机数是唯一的。你滚骰子2,你可能会得到两个头的,但他们仍然是随机的。真正的随机! 我想申请的是unique的支票,你只需要保持滚动生成的数字历史你了。

(C语言)线性同余产生随机数的问题。 线性同余随机数发生器是按Xn+1 = (aXn+c)%m

这题你可以直接全部算就行了,要记录下每一次算出来的结果,如果算出来的结果是已经产生过的,那就证明陷入循环了,不能产生所以的0~m-1的数,如果全部找到都还没有算出重复的,那就说明可以产生所有数


当前名称:线性同余随机数go语言 用线性同余法生成随机数序列
当前URL:http://myzitong.com/article/dohoech.html