?? sys_random.cpp
字號:
#include "math.h"
#include "stdio.h"
#include "iostream.h"
//#include "fstream.h"
#include "iomanip.h" /////////////for setw();
#include "string.h"
// C string library
#include "include.h"
#include "boolean.h"
#include "extreal.h"
#include "myexcept.h"
#include "newran.h"
#include "systemsim.h"
#include "sys_random.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int xPoisson1(Real);
int xPoisson2(Real);
//void initialize()
//{
// Random c;
// c.Set(0.4356);
//}
int xPoisson(long UN,float detT,float u)
{
int yy;
Real mean=UN*detT*u;
if(mean<=13.89)
// Histogram(&y,5000) ; /////////////////////////////////
// getchar();
yy=xPoisson1(mean);
else
{
yy=xPoisson2(mean);
}
return yy;
}
int xPoisson1(Real mean1)
{
Poisson y(mean1);
// Histogram(&y,5000) ; /////////////////////////////////
// getchar();
return (int)y.Next();
}
int xPoisson2(Real mean2)
{
int k=0;
float f1,f,s2;
Uniform y;
f=(float)y.Next();
s2=(float)exp(-mean2);
f1=s2;
if((f>0.0)&&(f<=f1))
k=0;
else
{
int i=0;
do
{
i++;
s2=(float)((mean2/i)*s2);
f1+=s2;
}
while(!(f<=f1));
k=i;
}
return k;
}
float xUniform(float down,float up)
{
Uniform y;
float rn,fact;
fact=up-down;
rn=(float)(y.Next()*fact)+down;
return rn;
}
float xExponent(float fCallLength)
{
Exponential y;
return (float)(y.Next()*fCallLength);
}
/*
float Shadow_Fading()
{
Normal y;
float m_fading;
m_fading=1./pow(10.,y.Next()/10.0*SV);
if(m_fading<FadingMargin) m_fading=FadingMargin;
if(m_fading>(1.0/FadingMargin)) m_fading=(1.0/FadingMargin);
return m_fading;
// return 4.*y.Next();
}
float Next_Shadow_Fading(float sf,float v,float detT)
{
const double X=20.;
Normal yy;
double y,m_fading;
y=log10(sf)*exp(-v*detT/X)*10.0/SV+yy.Next()*sqrt((1-exp(-2*v*detT/X)));
m_fading=1./pow(10.,y/10.0*SV);
if(m_fading<FadingMargin) m_fading=FadingMargin;
if(m_fading>(1.0/FadingMargin)) m_fading=(1.0/FadingMargin);
return m_fading;
}
*/
//注掉float Shadow_Fading()和float Next_Shadow_Fading(float sf,float v,float detT)
//的原因是由于近場衰落的標準差SV在此次仿真程序中還未定義。
/*
int xGeometry(float q)
{
Uniform yy;
float F,F1,F2;
int y;
F1=0.;
F2=q;
F=yy.Next();
// cout<<"F=="<<F<<endl;
// getchar();
if ((F>0.)&&(F<=(1-F2)))
y=1;
else
{
int i=0;
do
{
i++;
F1=F2;
F2*=q;
}
while (!((F>(1.0-F1))&&(F<=(1.0-F2))));
y=i+1;
}
return y;
}
int xMixed_Geometry(float q1,float q2,float c1,float c2)
{
Uniform yy;
float F,F1,s1,s2;
int y;
s1=q1;
s2=q2;
F=yy.Next();
F1=c1*(1-s1)+c2*(1-s2);
// cout<<"F=="<<F<<endl;
// getchar();
if (F<=F1)
y=1;
else
{
int i=0;
do
{
i++;
s1*=q1;
s2*=q2;
F1=c1*(1-s1)+c2*(1-s2);
}
while (!(F<=F1));
y=i+1;
}
return y;
}
*/
//注掉int xGeometry(float q)和int xMixed_Geometry(float q1,float q2,float c1,float c2)
//的原因是兩個函數在原仿真程序中并沒有使用,而且xGeometry的運行結果有些問題
//以下是重新編寫的int xGeometry(float p)函數
//返回一個均值為mean=1/p的服從幾何分布的隨機變量。p的取值在0,1之間。
int xGeometry(float p)
//p=1/u
{
Geometry tt(p);
return tt.iNext();
}
int xPareto(float shape,float scale,int MTU)
//返回服從Pareto分布的一個整型變量,PacketCall的大小服從Pareto分布。
//此分布為Pareto with cutoff;shape和scale為Pareto分布的參數,MTU為PacketCall的最大取值
{
Pareto s(shape,scale);
int iSize=(int)s.Next();
int iPacketCallSize;
iPacketCallSize=iSize<MTU?iSize:MTU;
return iPacketCallSize;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -