(转)随机数生成工具

这篇是师兄的一篇杰作,特意转过来,因为以后也要用到,到时候就没必要自己去写了。实为偷懒,但也是为了能够更快的解决问题。原文:     http://hi.baidu.com/davy_hwang/item/6c14bfd0a736823149e1dd57   

 1 #pragma once
 2 #include <ctime>
 3 const unsigned long maxshort = 65535L;
 4 const unsigned long multiplier = 1194211693L;
 5 const unsigned long adder = 12345L;
 6 class RandomNumber{
 7 private:
 8  // 当前种子
 9  unsigned long randSeed;
10 public:
11  // 构造函数,默认值0表示由系统自动产生种子
12  RandomNumber(unsigned long s = 0);
13  // 产生0 ~ n-1之间的随机整数
14  unsigned int Random(unsigned long n);
15  // 产生[0, 1) 之间的随机实数
16  double fRandom();
17 };
18 // 产生种子
19 RandomNumber::RandomNumber(unsigned long s)
20 {
21  if(s == 0)
22   randSeed = (unsigned long)time(0);    //用系统时间产生种子
23  else
24   randSeed = s;
25 }
26 // 产生0 ~ n-1 之间的随机整数
27 unsigned int RandomNumber::Random(unsigned long n)
28 {
29  randSeed = multiplier * randSeed + adder;
30  return (unsigned int)((randSeed) % n);
31 }
32 // 产生[0, 1)之间的随机实数
33 double RandomNumber::fRandom()
34 {
35  return Random(maxshort) / double(maxshort);
36 }
37  
38 //  --------------------------------------- test:
39 #include <iostream>
40 #include "Rdm.h"
41 #include <fstream>
42 using namespace std;
43 int main()
44 {
45  ofstream ofRet("Nodes.tr");
46  RandomNumber obj;
47  int Loc_x = 0;
48  int Loc_y = 0;
49  for ( int i = 0; i < 100; i++ )
50  {
51   Loc_x = obj.Random(600);
52   Loc_y = obj.Random(600);
53   ofRet << "-MN	" << i << "	-X	" << Loc_x << "	-Y	" << Loc_y << endl;
54  }
55  return 0;
56 }

将结果输入到matlAB可以得到如下的随机分布图,是不是很nice。nice归nice,过程还要自己去走一遍。

原文地址:https://www.cnblogs.com/bakari/p/3578820.html