(转)随机数生成工具

这篇是师兄的一篇杰作,特意转过来,因为以后也要用到,到时候就没必要自己去写了。实为偷懒,但也是为了能够更快的解决问题。原文:     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\t" << i << "\t-X\t" << Loc_x << "\t-Y\t" << Loc_y << endl;
54  }
55  return 0;
56 }
复制代码

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

posted @   bakari  阅读(608)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示

"感谢您的支持,我会继续努力"