srand()以及rand()函数用法(zz)

news/2024/7/4 1:44:21 标签: iostream, include, null, generator, 算法, numbers
 

srand()就是给rand()提供种子seed

如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的,

srand(n)

for(10)

rand()
也就是说,以一个固定的数值作为种子是一个缺点。 通常的做法是  以这样一句代码srand((unsigned) time(NULL));来取代,这样将使得种子为一个不固定的数, 这样产生的随机数就不会每次执行都一样了。


1,先看一个例子
include <iostream>
include <stdlib.h>
include <time.h>
using namespace std;
int main( void )
{
int i;
/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );
/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( " %6d/n", rand() );
}

2.关于time.h
time.h中包含很多有趣的函数,譬如
char *ctime(long *clock)
本函数把clock所指的时间(如由函数time返回的时间)转换成下列格式的
字符串:Mon Nov 21 11:31:54 1983/n/0

#i nclude <iostream>
#i nclude <stdlib.h>
#i nclude <time.h>
using namespace std;


void main()
{
time_t t1,t2;
char getTime[20];
char *ptstring=getTime;

int x,count=0;
x=RAND_MAX;
cout<<<'/n';
t1=time(NULL);
ptstring=ctime(&t1);

while(count<=100)
{
srand( (unsigned)time( NULL ) );
x=rand()%50;
if(x<5)
continue;
else
{
count++;
cout<<"the numth is "<<<'/n';
}
}

查看ptstring的值会显示 "Tue Sep 13 16:31:06 2005"

3, 最后说说srand()函数
void srand(unsigned seed) 初始化随机数发生器

有讨论如下:
1.C的函数库之所以没有把使用系统时钟初始化随机种子这步重要的操作直接放进ran

d函数的实现中,我觉得至少有三个原因:
(1)可以高效产生连续的随机数,不用每次都初始化;
(2)给程序员以更高的灵活性,因为可能在要求较高的场合,应该使用更好的的数据

做种子,而不是系统时钟;
(3)对于只是想产生大量伪随机数来尽兴某种验证或者统计,未必需要初始化,大不

了程序每次运行都产生同样的一系列随机数而已——有些情况下,这是无所谓的。

事实上有一个更重要的原因:
作为伪随机序列产生器的rand()函数,必须具备的一个重要特性就是-》产生的序

列必须是可重现的。
这不仅仅是一个算法,相当大的程度上,它关系到代码测试的准确性。如果算法

使用了和rand()的结果相关的数据,通过一个可控的可重现序列,我们就有机会再现每一

次测试的过程,从而更有效的找到问题的所在。
所以这里提出一个建议,代码中,如果rand()的函数结果关系到算法的结果,那么

,必须保证你的rand()调用是可重现的。

4,c语言里函数rand()和srand()的用法 - -

rand(void)用于产生一个伪随机unsigned int 整数。
srand(seed)用于给rand()函数设定种子。

srand 和 rand 应该组和使用。一般来说,srand 是对 rand 进行设置。
比如:
srand((UINT)GetCurrentTime());
int x = rand() % 100;
是生成 0 到 100 之间的随机数。

srand()是用来初始化随机种子数的,因为rand的内部实现是用线性同余法做的,他不是真

的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,式子如下


rand = rand*const_1 + c_var;
srand函数就是给它的第一个rand值。

用"int x = rand() % 100;"来生成 0 到 100 之间的随机数这种方法是不或取的,
比较好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))   产生一个0到n之间的随机


RAND_MAX=0x7fffffff

5.总结
1)srand()给rand()提供种子
2)srand()中的seed一般由时间函数得,eg srand((UINT)GetCurrentTime()) srand( (u

nsigned)time( NULL ) ) time()函数得到现在的系统时间...等等


http://www.niftyadmin.cn/n/841156.html

相关文章

ios开发之 --调用系统的页面,显示中文

在开发的过程中&#xff0c;我们会接入很多的sdk&#xff0c;比如相机&#xff0c;相册&#xff0c;是否允许获取位置等&#xff0c;大多数的情况下是默认显示英文&#xff0c; 在plist文件里面添加一个key就可以了&#xff0c;如下图&#xff1a; key&#xff1a;Localization…

Windows 7 Aero3D效果展示

1.查看AERO 3D效果 Win键Tab效果展示&#xff0c;自己按一下&#xff0c;看看2.AEro 3D效果锁定 WinCTRLTab效果展示&#xff0c;自己按一下&#xff0c;看看本文转自 jankie 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/jankie/183861&#xff0c;如需转…

web.xml详解

1&#xff0c;WEB工程加载web.xml过程WEB容器的加载顺序是&#xff1a;ServletContext -> context-param -> listener -> filter -> servlet。并且这些元素可以配置在文件中的任意位置。 2&#xff0c;xml 元素详解1.<display-name>Web应用名称 提供GUI工具可…

Mybatis框架搭建和简单的增删改查

一、导包&#xff1a; oricle和mybatis的包 二、写一个实体类&#xff0c;生成get&#xff0c;set&#xff0c;tostring。 package com.model;public class TUsers {private Integer id;private String username;private String password;public Integer getId() {return id;}p…

jquery.validate的ajax方式验证[可以一个控件下一次传递多个参数,已经成功通过验证]

在做网站的时候有一块需要用到jquery.validate插件 ajax方式的方式来验证原始密码是否正确&#xff0c;研究了研究加上博客园朋友的帮助&#xff0c;终于实现了。贴出代码 文章来源&#xff1a;http://www.cnblogs.com/laihuayan/p/3916050.html <script type"text/…

兔耳效应

作者&#xff1a;桂。 时间&#xff1a;2017-09-19 06:17:41 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7533286.html 前言 兔耳效应&#xff08;double-pulse effect / rabbit-ears effect) &#xff09;主要指矩形脉冲信号能量将扩散到与真实载频所在信道相邻的…

java json和对象互相装换

vjava json和对象互相装换 1.com.alibaba.fastjson.JSON 2.com.fasterxml.jackson.databind.ObjectMapper 本文转自 小眼儿 博客园博客&#xff0c;原文链接&#xff1a;http://www.cnblogs.com/hujunzheng/p/6593491.html&#xff0c;如需转载请自行联系原作者

访问 other process | 用户 空间

往任意USER PROCESS的内存读写kernel/ptrace.c : /** Access another process address space.* Source/target buffer must be kernel space,* Do not walk the page table directly, use get_user_pages*/intaccess_process_vm(struct task_struct *tsk, unsigned long addr, …