python,c++,C#随机数生成

来源:互联网 发布:aes加密算法原理java 编辑:程序博客网 时间:2024/06/09 18:31

先说python

python的random模块提供了多个伪随机数发生器,默认都是用当前时间戳为随机数种子。

下面是该模块几个最常用的函数

random()Return the next random floating point number in the range [0.0, 1.0). 

randint(a,b)Return a random integer N such that a <= N <= b

randrange([start,]stop[,step]) Return a randomly selected element from range(start, stop, step).

sample(seq,k)Return k length list of unique elements chosen from the sequence seq(从序列中取出k个不重复的值,用起来方便)

uniform(a,b)Return a random real number N such that a<=N<b

choice(seq)Return a random element from the NONE-empty sequence seq,if seq is empty,raises indexerror

seed([x])设置随机数发生器的种子值,默认以系统时间为种子,精度应该很高。

mark:python的random模块还提供了高斯分布,正太分布,beta分布等的随机数生成。

 

import random

random.random()

random.randint(0, 1)

random.choice('abcdefghij')

random.uniform(1, 3)
random.sample([1, 2, 3, 4, 5, 6, 7, 8, 9], 5)
其中,random.random的效率要比random.int快70倍。
C++的随机数
rand()和srand(unsigned int seed)
C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试) 
C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一般是用当前时间作为种子
用time(null),要包含time.h头文件
srand((unsigned)time(null))
rand()%MAX
要实现上面python其他各种功能只能自己实现了。
并且由于rand默认是以1为种子,所以要生成随机数时一定要设置种子的值...
C#的随机数
Random类
Random ro=new Random()默认以当前系统时间作为种子
ro.Next([a,]b)返回一个(大于等于a)小于b的非负随机数
ro.NextDouble() 返回一个介于0.0和1.0之间的随机数
值得注意的是,由于系统时间的分辨率有限,对于c++和C#,使用系统时间也只是精确到秒(python的精度很高),如果两次设置种子的时间小于1秒,那么得到的序列就是一样的。使用单个 Random 对象生成所有随机数可以避免此问题。
原创粉丝点击