📄 ch13.h
字号:
/************************************************
Expect bugs!
Please use and enjoy, and let me know of any bugs/mods/improvements
that you have found/implemented and I will fix/incorporate them into
this file. Thank Mr. Xushiliang once again.
hujinshan@2002.11.3
Airforce Engineering University
************************************************/
/***** #include "CH13.h" 随机数的产生*****/
#ifndef CH13_H_
#define CH13_H_
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
//*******************************************************************
double mrnd1(double* r);//0-1之间均匀分布的一个随机数
void mrnds(double r,double p[],int n);//0-1之间均匀分布的随机数序列
int mrab1(int a,int b,int* r);//任意区间内均匀分布的一个随机整数
void mrabs(int a,int b,int* r,int p[],int n);//任意区间内均匀分布的随机整数序列
double mgrn1(double u,double g,double* r);//任意均值与方差的一个正态分布随机数
void mgrns(double u,double g,double* r,int n,double a[]);//任意均值与方差的正态分布随机数序列
//*******************************************************************
double mrnd1(double* r)
{
int m;
double s,u,v,p;
s=65536.0; u=2053.0; v=13849.0;
m=(int)(*r/s); *r=*r-m*s;
*r=u*(*r)+v; m=(int)(*r/s);
*r=*r-m*s; p=*r/s;
return(p);
}
/////////////////////////////////////////////////////////////
void mrnds(double* r,double p[],int n)
{
int i,m;
double s,u,v;
s=65536.0; u=2053.0; v=13849.0;
for (i=0; i<=n-1; i++)
{ *r=u*(*r)+v; m=(int)(*r/s);
*r=*r-m*s; p[i]=*r/s;
}
return;
}
/////////////////////////////////////////////////////////////
int mrab1(int a,int b,int* r)
{
int k,l,m,i,p;
k=b-a+1; l=2;
while (l<k) l=l+l;
m=4*l; k=*r; i=1;
while (i<=1)
{ k=k+k+k+k+k;
k=k%m; l=k/4+a;
if (l<=b) { p=l; i=i+1;}
}
*r=k;
return(p);
}
/////////////////////////////////////////////////////////////
void mrabs(int a,int b,int* r,int p[],int n)
{
int k,l,m,i;
k=b-a+1; l=2;
while (l<k) l=l+l;
m=4*l; k=*r; i=0;
while (i<=n-1)
{ k=k+k+k+k+k;
k=k%m; l=k/4+a;
if (l<=b) { p[i]=l; i=i+1;}
}
*r=k;
return;
}
/////////////////////////////////////////////////////////////
double mgrn1(double u,double g,double* r)
{
int i,m;
double s,w,v,t;
s=65536.0; w=2053.0; v=13849.0;
t=0.0;
for (i=1; i<=12; i++)
{ *r=(*r)*w+v; m=(int)(*r/s);
*r=*r-m*s; t=t+(*r)/s;
}
t=u+g*(t-6.0);
return(t);
}
/////////////////////////////////////////////////////////////
void mgrns(double u,double g,double* r,int n,double a[])
{
int i,k,m;
double s,w,v,t;
s=65536.0; w=2053.0; v=13849.0;
for (k=0; k<=n-1; k++)
{ t=0.0;
for (i=1; i<=12; i++)
{ *r=(*r)*w+v; m=(int)(*r/s);
*r=*r-m*s; t=t+(*r)/s;
}
a[k]=u+g*(t-6.0);
}
return;
}
/////////////////////////////////////////////////////////////
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -