C++产生随机数变化太小

我想用C++产生30个随机数,使用了rand()和时间参数作为种子的srand((unsigned) time(NULL))。可是结果就是在19000多左右随时间缓慢增长。请问有什么办法改进吗?我需要让随机数浮动的范围在全部范围内

求一段程序产生30个0~1之间不同的随机数

你是不是每次设了种子就调一次rand()啊,应该是整个代码就只设一次srand(),然后就不断调rand()就行了,因为每次设srand()后,rand()会从一个随机数序列的第一个开始取,如果你不断在设,由于你的CPU时钟差别不大,所以你产生的随机数差别也不大了。
如果你是要0~1之间的随机数,比如说是保留三位小数,可以用
a=(rand()%1000)/1000;
这样出来的就是在0~1之前的均匀分布随机数了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-16
看以下代码
srand((unsigned) time(NULL));
for(int i=0;i<30;i++)
{
int s=rand()%2;
std::cout<<s<<std::endl;
}
关键就是用rand函数生成的数用二求余,就只能得到0和1。明白了吗
第2个回答  2011-03-16
计算机本事是个确定性的系统,原理上就不可能产生真正的随机数
你的方法是正确的
以下是msdn的例子,估计和你的差不多:
/* RAND.C: This program seeds the random-number generator
* with the GetTickCount, then displays 10 random integers.
*/

#include <stdlib.h>
#include <stdio.h>
#include <winbase.h>

void main( void )
{
int i;
/* Seed the random-number generator with GetTickCount so that
the numbers will be different every time we run.
*/
srand(
GetTickCount()
);
/* Display 10 numbers. */
for(
i = 0; i < 10;i++
)
printf(
"%6d\n", rand()
);
}

C++ 中生成保留0到1000000的随机数为什么都很小
rand是系统用系统内的种子生成的伪随机数,仔细观察会发现每次重新运行生成的数列完全一样。试试srand这个是以当前时间生成随机种子,可以做到随机性高。关于数字小只能改算法,rand最高生成到40000以下还是65535具体记不得了。

用c++生成随机数 为什么每次结果都一样 如何控制结果在0~1000之内_百度...
1 C++的随机数函数rand是一个伪随机数,从固定的初始种子计算得出。所以每次运行获取到的随机数序列是相同的。要解决这一问题,需要设置一个随机数种子,一般用当前时间作为种子。代码为 srand(time(NULL));2 要控制随机数的范围,可以使用模除操作,即%运算。要控制结果在0~1000之间,可以使用代码 ra...

怎么控制 C++生成随机数的范围
大概就是这样:rand()%\/\/注意没有范围高级一点的:(注意有头文件time.h)int a{ srand((unsigned\/*此处填随机种子,我选用时间*\/)time(NULL)); rand()%x\/*x处填范围*\/; }代码运用:(注意还保存到文件里了)include<stdio.h>#include<stdlib.h>#include<conio.h>#include<windows....

我有一段C++函数,是关于生成随机数的,如何更改它输出值的小数点位置,要...
cout<<b<<endl;\/\/输出为12.34,cout<<setprecision(5)<<b<<endl;\/\/输出为12.23,原来的数位不够也不补0;cout<<setiosflags(ios::fixed)<<setprecision(5)<<b<<endl;\/\/输出为12.34000,数位数是5位,不够补0;system("pause");} 输出如下:12.3457 12.346 12.34568 12.34 12.34 ...

求c++随机生成1到100数的代码改正(每次随机成的总是同一个数)
\/\/因为单用ran_num = rand()%100;这个语句的话产生的是伪随机数,所以程序一开始都是有一个固定的随机数的,如果想要得到真正的随机数,可以加上:srand(time(NULL));这一句,将当前的时间作为种子产生随机数,因为时间是不可能相同的,所以产生的随机数将不同,同时记得加上头文件#include望采纳 ...

c++中产生不重复的随机数
●第一个问题:产生随机数。在C++中要产生随机数必须用到两个函数:srand()和rand()函数,使用这两个函数必须包含头文件 <stdlib.h>。其中rand()是产生一个伪随机数,比如:int a=rand();函数返回值的取值范围是int类型的取值范围,如果要取得某个范围的随机数,可以通过取余来实现,比如需要小于...

怎样在C++中产生10个30~100的随机数
C++中没有自带的random函数,要实现随机数的生成就需要使用rand()和srand()。不过,由于rand()的内部实现是用线性同余法做的,所以生成的并不是真正的随机数,而是在一定范围内可看为随机的伪随机数。代码如下:include <iostream> include <cstdlib> include <ctime> define random(a,b) (rand()%(...

C++高级程序语言编辑猜数游戏:电脑随机产生介于1到9间的一位数字我来...
using namespace std;int num[9] = {5,6,7,8,9,1,2,3,4};int main(){ int a,b;\/\/根据系统时间获得随机数种子以便每次都有不同的随机数 \/\/注意:这里不用srand()而直接rand会每次产生一样的数!!srand((unsigned)time(NULL));a= num[rand()%9];cout<<"请输入猜测,五次机会"<...

为什麽c++中随机函数rand()产生的并不是随机数,我编译多次,都只是显 ...
其实函数rand生成的是伪随机数,既然是伪随机数,那么它产生的数字就是一定的,只不过没有规律。如果我们想要产生真正的伪随机数,就要用到srand函数和rand函数,用到srand函数的时候参数就是当前的时间了,所以这保证了rand函数产生的是真正的伪随机数。用到该函数的时候要包含头文件《time.h》...

c++如何产生随机数,并规定取值范围?
用rand()函数产生随机数,想规定范围就用取余,比如限定一个随机数为【3 ,102】的数,那么(rand()%(102-3+1))+3,这样得到数就会在这个范围里,102-3+1==100,那么rand()%100的范围为 0-99,这个范围再加3为3 - 102

相似回答