关于rand函数

C语言要获得随机数,就要用到rand()函数。关于rand函数要注意以下几点:

1.要包含stdlib.h,rand函数声明在这个函数里。

2.rand()函数返回一个0~RAND_MAX之间的随机数,经测试在VC,GCC中,[0,RAND_MAX],这个随机数是可以是0或RAND_MAX的。

3.rand()产生的是伪随机数,如果不初始化,每次输出都是一样的序列。

4.srand(seed)是初始化函数,seed一般用机器时间。

RAND_MAX是跟实现有关的,在VC6里是32767,在GCC里是2147483647。当然rand实现也不一样。

调用一亿次rand函数,VC6耗时约530ms,GCC耗时约1640ms.

当我们需要一个特定区间内的随机整数时,很多书上介绍的方法是:

x = rand()%(b-a+1) +a

这样确实能取得[a,b]区间内的整数,但每个数的概率不一定是一样的。

假设RAND_MAX是8,rand返回0~8之间随机数,如果取0~5之间的随机数,rand还是返回0~8,0~5取余后还是0~5,

6~8取余后,产生0~3,所以0、1、2的概率就要比3、4、5高两倍。

0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 0 1 2

我的做法是:

int getRand(int max)
{
	int i = rand();
	double f = (double)i / (double)(RAND_MAX+1);
	return (int)(f*(double)max);
}

这个函数会产生[0,max)的随机数,0~max-1出现的概率是均等的。

[a,b]区间的随机数就是 a+getRand(b-a+1);

由于现在PC的浮点算法很快,这个算法比取余慢不了多少。

时间: 2024-10-14 20:02:50

关于rand函数的相关文章

php MySQL使用rand函数随机取记录(转)

php MySQL使用rand函数随机取记录 如何在mysql中使用随机数, 如何写一个语句能一下更新几百条MYSQL数据! 需要测试MYSQL数据库,里面有一个上万条数据的数据库,如何写一个PHP文件一下每次更新几百条信息,我都是写一个循环一次更新一条信息,这样我知道用WHILE写就可以了,要是一次更新好比100条数据改如何写呢! 正确答案是:UPDATE cdb_posts SET views = rand(); 顺便给你找了点关于mysql rand函数的实例,如下: 那就在insert

matlab rand函数详解

均匀分布的随机数或矩阵 语法 Y = rand(n) Y = rand(m,n) Y = rand([m n]) Y = rand(m,n,p,...) Y = rand([m n p...]) Y = rand(size(A)) rand s = rand('state') 描述 rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组. Y = rand(n) 返回一个n x n的随机矩阵.如果n不是数量,则返回错误信息. Y = rand(m,n) 或 Y = rand([m n])

关于rand()函数 转载于其他人

C++中的rand()函数 分类: 编程语言/ C#/ 文章 C++中产生随机数种子对于初学者一直都很困惑.大家知道,在C中有专门的srand(N)函数可以轻松实现这一功能,然而在C++中则要复杂一些.下面是笔者学习的一点心得,希望对大家能有所帮助.(这里我们依然要借助C标准库中的rand()函数) 函数说明: int rand();                                          :返回从[0,MAX)之间的随机整数,这里的MAX与你所定义的数据类型而定:需#

C語言 rand函数 进阶探讨与实现

C语言中随机函数应用 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过.那么怎么实现C语言中的随机函数呢? 除了random函数,还有一个rand函数,也是一个随机函数,可以产生从0到rand_max的随机数. #include <stdio.h> #include <stdlib.h> int main() { int x; x = rand(); printf("%d

C中的rand函数和srand函数

rand函数和srand函数 先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. 1.rand(产生随机数) 表头文件: #include<stdlib.h> 定义函数 :int rand(void) 函数说明 : 因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间.在调用此函数产生随机数前,必须先利

浅析C语言中的rand函数和srand函数(一)

我们在编程解决问题的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的rand函数,生成的也是伪随机数. 一个简单的示范如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 int 6 main(int argc, char** argv) 7 { 8 // 以机器当

MySQL使用rand函数实现随机数[转]

如何写一个语句能一下更新几百条MYSQL数据! 需要测试MYSQL数据库,里面有一个上万条数据的数据库,如何写一个PHP文件一下每次更新几百条信息,我都是写一个循环一次更新一条信息,这样我知道用WHILE写就可以了,要是一次更新好比100条数据改如何写呢! 谢谢 正确答案是:UPDATE cdb_posts  SET  views = rand(); 顺便给你找了点关于mysql rand函数的实例,如下: 那就在insert 命令中,value()里面用rand(),注意字段宽度是否够一直以为

rand函数的实现原理

rand函数的实现原理 rand函数产生的是伪随机数,也就是说它不是一个真实的随机数. 那么伪随机数是怎么实现的呢?原理大概如下: 如果约定:a1=f(seed),an+1=f(an)那你可以行到一个序列:a1,a2,a3...an,那么要制作一个伪随机函数rand,只需要让它每调用一次就返回序列的下一个元素就行. 就相当于第1次调用rand返回a1,第2次返回a2,-,第n次返回an,这样每次调rand都能拿到一个不同的数,只要整个序列的规律不明显,整个函数看起来就是随机的. 现在计算机上的r

Matlab中Rand()函数用法

一.理论准备        matlab函数randn:产生均值为0,方差 σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数.       用法:Y = randn(n),返回一个n*n的随机项的矩阵.如果n不是个数量,将返回错误信息.       Y = randn(m,n) 或 Y = randn([m n]),返回一个m*n的随机项矩阵.       Y = randn(m,n,p,...) 或 Y = randn([m n p...]),产生随机数组(感觉就是三维数组,请看