当前位置: 首页 > 图文教程 > 开发语言 > C/C++ > 任意分布的随机数的产生方法—VC程序实现方法

C/C++
2009年编程开发语言的使用率
C++对象模型笔记:dynamic binding
cstl -- c语言编写通用数据结构和常用算法库(模仿SGI STL)
子串匹配:不回溯算法
C++ Builder 访问 USB 口的方法
C++中二维数组的动态分配
数组和指针在编译的时候的区别
如何利用doxygen生成pdf文档
有关C++析构函数的异常(Exceptions in Destructors)
C++模板学习之函数对象之谓词
5月编程语言排行榜:D语言风采不再
一个C++类实现文件全盘搜索
C语言编程宝典之一 读书笔记
C语言嵌入式系统编程修炼(内存操作)
C++内存管理
带头结点的双循环链表
有关VA_LIST的用法
C++标准库简介(转)
一个栈类的实现(链栈)
C 引用与指针的比较

C/C++ 中的 任意分布的随机数的产生方法—VC程序实现方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 326 ::
收藏到网摘: n/a

前天魚哥要求下發此帖,我這裡的本子都是繁體WIN,湊合看把

下載源代碼


附件: random.rar (2006-4-20 10:14 AM, 24.78 K)
该附件被下载次数 22


    隨機數在實際運用中非常之多,如游戲設計,信號處理,通常我們很容易得到平均分布的隨機數。但如何根據平均分布的隨機數進而產生其它分布的隨機數呢?本文提出了一種基於幾何直觀面積的方法,以正態分布隨機數的產生為例討論了任意分布的隨機數的產生方法。
正文:
一、平均分布隨機數的產生
    大家都知道,隨機數在各個方面都有很大的作用,在vc的環境下,為我們提供了庫函數rand()來產生一個隨機的整數。該隨機數是平均在0~RAND_MAX之間平均分布的,RAND_MAX是一個常量,在VC6.0環境下是這樣定義的:

#define RAND_MAX 0x7fff
它是一個short 型數據的最大值,如果要產生一個浮點型的隨機數,可以將rand()/1000.0這樣就得到一個0~32.767之間平均分布的隨機浮點數。如果要使得范圍大一點,那麼可以通過產生幾個隨機數的線性組合來實現任意范圍內的平均分布的隨機數。例如要產生-1000~1000之間的精度為四位小數的平均分布的隨機數可以這樣來實現。先產生一個0到10000之間的隨機整數。方法如下 :

int a = rand()%10000;
然後保留四位小數產生0~1之間的隨機小數:

double b = (double)a/10000.0;
然後通過線性組合就可以實現任意范圍內的隨機數的產生,要實現-1000~1000內的平均分布的隨機數可以這樣做: