主题:求srand和rand的解释,和用法!
f34355281
[专家分:50] 发布于 2011-07-14 15:14:00
srand是产生什么随机种子什么的,随机种子是什么?()里面的是什么?
rand又是什么
详细解释!
回复列表 (共10个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-07-14 15:40:00
前者是初始化,后者才是生成随机数的:)可以简单地这样理解:)
板凳
windy0will [专家分:2300] 发布于 2011-07-14 17:14:00
glibc里面的描述
[url]http://www.gnu.org/s/hello/manual/libc/ISO-Random.html[/url]
[quote]— Function: int rand (void)
The rand function returns the next pseudo-random number in the series. The value ranges from 0 to RAND_MAX.
— Function: void srand (unsigned int seed)
This function establishes seed as the seed for a new series of pseudo-random numbers. If you call rand before a seed has been established with srand, it uses the value 1 as a default seed.
To produce a different pseudo-random series each time your program is run, do srand (time (0)).
[/quote]
3 楼
f34355281 [专家分:50] 发布于 2011-07-14 19:01:00
我的理解是这样你看对不对
rand是按一定的规律生成随机数,但是如果我们printf("%d %d",rand(),rand());就会发现同时输出的时候是相等的,如果我们想改变这种规律就用srand来改变这种规律!使得它们每次产生的数不一样!
srand它括号里面一般用来表示生产随机数的时间间隔,改变后在调用rand(),这时printf("%d %d",rand(),rand());就产生2个不同的数了。
对不对?
4 楼
windy0will [专家分:2300] 发布于 2011-07-14 22:08:00
不对,连续调用rand返回值是不同的,不过,同一程序不同时间运行将得到相同结果。也许可以用下面代码解释它的一种实现原理:
#include <stdlib.h>
static unsigned int _seek = 1U;
int rand (void)
{
_seek *= 123456;
// .... 其他操作等
_seek += 87654;
return (int)(_seek % RAND_MAX);
}
void srand (unsigned int seek)
{
_seek = seek;
}
5 楼
f34355281 [专家分:50] 发布于 2011-07-14 22:42:00
不好意思,还是不懂!
6 楼
windy0will [专家分:2300] 发布于 2011-07-15 09:17:00
rand的返回值依赖于所谓的随机种子_seek,只要_seek相同,返回值就一定相同。当第一次调用rand以前,没有人为改变_seek,它总被默认为1,因此同一程序不同时间运行都得到相同结果。但每调用rand后,_seek就会被改变,因此连续调用rand一般不会得到相同结果。srand就是用来人为改变_seek的值,一般用当前时间来初始化随机种子。这是因为每次运行程序的时间是不一样的,得到的随机序列也不一样。
7 楼
f34355281 [专家分:50] 发布于 2011-07-15 12:26:00
照你这么说那么[code=c]printf("%d %d\n",rand(),rand());
[/code]应该是2个不同数!
[code=c]
int i;
printf("%d",rand());
printf("%d",i+1);
printf("%d",rand());
[/code]
就应该是相同数!
可是我执行后不对啊!
8 楼
windy0will [专家分:2300] 发布于 2011-07-15 13:06:00
我说的同一程序不同时间是这样的:同一源代码编译成foo.exe后,今天执行得得到的2个随机数是456和789,那么明天执行还是456和789,不管什么时候运行都是。而不是同一程序不同位置,实际上,上面那两个地方都将得到不同结果。
9 楼
x不会飞 [专家分:0] 发布于 2011-10-15 20:00:00
rand要输出返回值,需要srand函数提供一个种子,然后rand函数利用这个种子通过一个公式来求出并返回一个值。然后这个值再作为新的种子供rand函数调用。
如果没有srand的话,种子默认为1。
起始种子固定时,程序运行一次或多次的结果都是一样的。
10 楼
lijiaoyand [专家分:50] 发布于 2011-10-18 18:20:00
我对C语言不了解啊
SIGNATURE:-----------------------------------
Imagination is more important than knowledge.
[url=http://www.vipfrees.com/nike-free-run-2-c-32.html]nike free run 2[/url] , [url=http://www.vipfrees.com/nike-lunarglide-3-c-31.html]nike lunarglide 3[/url] , [url=http://www.vipfrees.com/nike-free-30-c-37.html]nike free 3.0[/url]
我来回复