⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 random.inl

📁 本程序是在CCS环境下运行的
💻 INL
字号:
//random.inl			随机函数(方法)定义
// Ver 1.0.0.0
// 版权所有(C) 何渝, 2002
// 最后修改: 2002.5.31.

#ifndef _RANDOM_INL
#define _RANDOM_INL

//产生一个[0,1]区间内均匀分布伪随机数
inline double 
rand_01_One(double& seed)
{		//seed为随机数种子
	seed = ((unsigned long)seed) % MODUL65536;		//以65536为模对种子取余
	seed = RandCoef2053 * (seed) + RandCoef13849;	//乘、加系数
	seed = ((unsigned long)seed) % MODUL65536;		//以65536为模对种子取余
	double rand = (seed) / (double)MODUL65536;		//使随机数在[0,1]区间
	return( rand );									//返回随机值
}

//产生多个[0,1]区间内均匀分布伪随机数
inline void 
rand_01_Series(double& seed, valarray<double>& dp, const size_t stCount)
{	//seed为随机数种子,dp存放生成的随机数列,srCount指定要生成的随机数个数
	for(size_t st=0; st<stCount; st++)
	{
		seed = RandCoef2053 * (seed) + RandCoef13849;
		seed = (unsigned long)seed % MODUL65536;	//以65536为模对种子取余
		dp[st] = seed / (double)MODUL65536;
	}
}

//产生任意[a,b]区间内一个均匀分布伪随机整数
inline size_t 
rand_ab_One(size_t a, size_t b, size_t& seed)
{			//a,b为区间左右端点,seed为种子
	size_t rand;
	size_t stk = b - a + 1;
	size_t stl = 2;
	while(stl < stk) stl = stl + stl;
	size_t modul = 4 * stl;
	stk = seed;
	size_t sti = 1;
	while(sti <= 1)
	{
		stk = 5 * stk;
		stk = stk % modul;
		stl = stk /4 +a;
		if (stl<=b)
		{
			rand=stl; 
			sti=sti+1;
		}
      }
    seed=stk;
    return(rand);
}

//产生多个任意[a,b]区间内均匀分布伪随机整数序列
inline void 
rand_ab_Series(size_t a, size_t b, size_t& seed, valarray<size_t>& sp, size_t stCount)
{   //a,b为区间左右端点,seed为种子,sp存放随机数序列,stCount指定随机数个数
	size_t stk = b - a + 1;
	size_t stl = 2;
	while(stl < stk) stl = stl + stl;
	size_t modul = 4 * stl;
	stk = seed;
	size_t sti = 0;
	while(sti < stCount)
	{
		stk = 5 * stk;
		stk = stk % modul;
		stl = stk / 4 +a;
		if (stl <= b)
		{
			sp[sti]=stl; 
			sti = sti + 1;
		}
    }
    seed=stk;
}

//产生任意均值与方差的一个正态分布随机数
//函数的参数:mu和ro(μ和σ值)要事先给定,也可从其它程序中获得。
//如果算法中的n值要取的更大(超过12),程序要稍加修改。
inline double 
rand_NormalDistributing_One(double mu, double ro, double& seed)
{
	double rand = 0.0;
	for (size_t st=0; st<12; st++)
	{
		seed = RandCoef2053 * (seed) + RandCoef13849;	//乘、加系数
		seed =(unsigned long)seed % MODUL65536;			//以65536为模对种子取余
		rand = rand + (seed) / (double)MODUL65536;
	}
	rand = mu + ro * (rand - 6.0);
	return(rand);
}

//产生任意均值与方差的正态分布随机数序列
//函数的参数:mu和ro(μ和σ值)要事先给定,也可从其它程序中获得。
//如果算法中的n值要取的更大(超过12),程序要稍加修改。
inline void 
rand_NormalDistributing_Series(double mu, double ro, double seed, valarray<double>& dp, size_t stCount)
{			//seed为种子,dp存放随机数序列,stCount指定要生成的随机数个数
	for (size_t st = 0; st < stCount; st++)
	{
		double rand = 0.0;
		for (size_t sr=1; sr<=12; sr++)
		{
			seed = (seed) * RandCoef2053 + RandCoef13849;
			seed = (unsigned long)seed % MODUL65536;			//以65536为模对种子取余
			rand = rand + (seed) / (double)MODUL65536;
		}
		dp[st] = mu + ro * (rand - 6.0);
	}
}

#endif //_RANDOM_INL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -