码迷,mamicode.com
首页 > 其他好文 > 详细

均匀分布的随机数

时间:2019-10-04 23:05:32      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:spl   lin   使用   inline   mod   变换   matrix   pre   a+b   

一、功能

产生(a, b)区间上均匀分布的随机数。

二、方法简介

均匀分布的概率密度函数为

\[ f(x)=\left\{\begin{matrix} \frac{1}{b-a} & ,a\leq x\leq b\\ 0 & ,others \end{matrix}\right. \]

通常用\(u(a, b)\)表示。均匀分布的均值为\(\frac{a+b}{2}\),方差为\(\frac{(a-b)^{2}}{12}\)

产生均匀分布随机数的方法如下:

首先,由给定的初值\(x_{0}\),用混合同余法:
\[ \left\{\begin{matrix} x_{i} &=(ax_{i-1}+c)(mod \ M)\\ y_{i} &=x_{i}/M \end{matrix}\right. \]
产生(0, 1)区间上的随机数\(y_{i}\)。其中:a=2045,c=1,M=2^{20};然后,通过变换\(z_{i}=a+(b-a)y_{i}\)产生(a,b)区间上的随机数\(z_{i}\)

三、使用说明

生成(a,b)区间上均匀分布随机数的C函数:

/************************************
    a       ---给定区间下限
    b       ---给定区间上限
    seed    ---随机数种子
************************************/
double uniform(double a, double b, long int *seed)
{
    double t;
    *seed = 2045 * (*seed) + 1;
    *seed = *seed - (*seed / 1048576);
    t = (*seed) / 1048576.0;
    t = a + (b - a) * t;
    return(t);
}

均匀分布的随机数

标签:spl   lin   使用   inline   mod   变换   matrix   pre   a+b   

原文地址:https://www.cnblogs.com/liam-ji/p/11623024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!