说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

怎样生成随机数

编辑:说三道四文库 发布时间:2018-07-18 05:20
HTML文档下载 WORD文档下载 PDF文档下载
我需要生成一个[0,1]之间的均匀分布的随机数,C++中应该有这样的库函数吧,好像是rand(),但不会用,望指教。
srand(time(0))//初始化随机种子。
int i = rand() % 32768;//获得一个0到32767之间的随机整数。
double d = i / 32767.0;//把它转化成[0,1]之间的浮点数。

我觉得这样就够随机的了。
不好意思,第一句分号掉了:
srand(time(0));
^_^
好,厉害
#include "time.h"

srand(time(0));                //初始化随机种子。
int i = rand() % n + m;        //获得一个m到n-1之间的随机整数。
要不要源代码??给个函数吧

#include <time.h>
// InitializeSeed(): set the random number generator seed
void InitializeSeed() {
srand((unsigned int) time(0));
}

// Uniform(): generate a uniformly distributed random 
// number between Low and High
int Uniform(int Low, int High) {
if (Low > High) {
cerr << "Illegal range passed to Uniform\n";
exit(1);
return 0; // Makes MS C++ shut up

}
else {
int IntervalSize = High - Low + 1;
int RandomOffset = rand() % IntervalSize;
return Low + RandomOffset;
}
}
楼上的朋友,你说的关于用系统时间生成的随机数是和系统时间有关的吧,如果在一个循环中使用,生出的会不会很接近?那生成的是真正的均匀分布么???
如果time()用rdtsc实现应该就不会有随机数接近的可能,..
那样的话,如果你是在Windows操作系统中,就使用API:GetTickCount吧。
srand(GetTickCount());
效率还比time()快10倍。
楼上的朋友,你说的关于用系统时间生成的随机数是和系统时间有关的吧,如果在一个循环中使用,生出的会不会很接近?那生成的是真正的均匀分布么???
->如果在循环中用srand初始化,我感觉有问题.
见例子:
#include <stdlib.h> 
#include <stdio.h> 

int main(void) 

   int i; 
   printf("Ten random numbers from 0 to 99\n\n"); 
   for(i=0; i<10; i++) {
      srand(time(0)); 
      printf("%d\n", rand() % 100); }  
   return 0; 


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

int main(void) 

   int i; 

   printf("Ten random numbers from 0 to 99\n\n"); 
   srand(time(0)); 
   for(i=0; i<10; i++) {
      printf("%d\n", rand() % 100); }  
   return 0; 
}
up
rand()是不是有可能取不到数啊?
要是有的话什么办?
毕竟随机数的话有取不到某个数的可能啊~
#include <iostream>
#include <ctime>

int main()
{
srand( ( unsigned ) time( NULL ) );
for ( int i = 0; i < 1; ++i )
{
std::cout << rand() % 100 << ' ';
}
return 0;
}
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘