[C++]用rand()和srand()产生伪随机数的方法(2010-03-22 11:33:33)
2012-04-17 15:17
375 查看
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
一个通用的公式是:
要取得[a,b)之间的随机整数,使用(rand() % (b-a))+ a (结果值将含a不含b)。
在a为0的情况下,简写为rand() % b。
用rand() / double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模)这不是伪随机浮点数最好的实现方法,不过可以将就着用用…
rand()的用法
rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。这样,如果你要产生0~10的10个整数,可以表达为:
int N = rand() % 11;
总结来说,可以表示为:
a + rand() % n
其中的a是起始值,n是整数的范围。若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。
通常rand()产生的随机数在每次运行的时候都是与上一次相同的(这一点编程验证了),这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。具体来说,就是首先包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。
举例如下:
#include<stdio.h>
#include<iostream>
#include<time.h>
using namespace std;
void main()
{
int rand1,rand2;
srand(time(0));//调用此函数,则每次运行产生不同的随机数。否则每次main后rand1、rand2的值都与上一次相同
rand1=rand()%100;//直接用此方法产生,rand1和rand2的值也不同
rand2=rand()%100;
cout<<rand1<<endl<<rand2<<endl;
}
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
一个通用的公式是:
要取得[a,b)之间的随机整数,使用(rand() % (b-a))+ a (结果值将含a不含b)。
在a为0的情况下,简写为rand() % b。
用rand() / double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模)这不是伪随机浮点数最好的实现方法,不过可以将就着用用…
rand()的用法
rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。这样,如果你要产生0~10的10个整数,可以表达为:
int N = rand() % 11;
总结来说,可以表示为:
a + rand() % n
其中的a是起始值,n是整数的范围。若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。
通常rand()产生的随机数在每次运行的时候都是与上一次相同的(这一点编程验证了),这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。具体来说,就是首先包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。
举例如下:
#include<stdio.h>
#include<iostream>
#include<time.h>
using namespace std;
void main()
{
int rand1,rand2;
srand(time(0));//调用此函数,则每次运行产生不同的随机数。否则每次main后rand1、rand2的值都与上一次相同
rand1=rand()%100;//直接用此方法产生,rand1和rand2的值也不同
rand2=rand()%100;
cout<<rand1<<endl<<rand2<<endl;
}
相关文章推荐
- C++中srand()和rand()产生伪随机数的方法
- 用C语言的rand()和srand()产生伪随机数的方法总结
- rand()和srand()产生伪随机数的方法总结(转)
- 用rand()和srand()产生伪随机数的方法总结
- 用C语言的rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- rand()和srand()产生伪随机数的方法
- C++中用rand()和srand()产生为随机数方法介绍
- C++中用rand()和srand()产生随机数方法介绍
- 用rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- C++中用rand()和srand()产生随机数方法介绍
- 用C语言的rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- 转:用C语言的rand()和srand()产生伪随机数的方法总结
- 用C语言的rand()和srand()产生伪随机数的方法总结
- 用C语言的rand()和srand()产生伪随机数的方法总结
- C++中用rand()和srand()产生为随机数方法介绍
- 用C语言的rand()和srand()产生伪随机数的方法总结