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

C/C++
ActiveX控件中多控制的设计与实现
向CCmdTarget的派生类添加一个接口的实现
多线程安全的变量模板
利用硬件信息实现共享软件的安全注册
托管C++程序开发—Win表单文档程序设计(下)
在ATL中实现窗口
基于Visual C++ 的自动化客户端的实现
ATL接口映射宏详解
托管C++程序开发—Win表单文档程序设计(中)
使用Visual C++开发SOAP客户端应用
Visual C#的SQL Server编程
VC# .Net中浏览Crystal Report
关于GC:Dotnet中Dispose的设计模式
Visual C++ 优化概述
Visual C++.NET GDI+编程基础
.NET 中的断言和跟踪
每个开发人员现在应该下载的十种必备工具
代码最优化.NET中的内存管理
在VC++下对文件属性的获取与更改
高手必看:C、C++程序的优化之路

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 330 ::
收藏到网摘: 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內的平均分布的隨機數可以這樣做: