Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members

improla_rng.h

00001 #include <math.h> 00002 #define IM1 2147483563 00003 #define IM2 2147483399 00004 #define AM (1.0/IM1) 00005 #define IMM1 (IM1-1) 00006 #define IA1 40014 00007 #define IA2 40692 00008 #define IQ1 53668 00009 #define IQ2 52774 00010 #define IR1 12211 00011 #define IR2 3791 00012 #define NTAB 32 00013 #define NDIV (1+IMM1/NTAB) 00014 #define EPS 1.2e-7 00015 #define RNMX (1.0-EPS) 00016 00017 float ran2(long *idum) 00018 { 00019 int j; 00020 long k; 00021 static long idum2=123456789; 00022 static long iy=0; 00023 static long iv[NTAB]; 00024 float temp; 00025 00026 if (*idum <= 0) 00027 { 00028 if (-(*idum) < 1) 00029 *idum=1; 00030 else 00031 *idum = -(*idum); 00032 00033 idum2=(*idum); 00034 00035 for (j=NTAB+7;j>=0;j--) 00036 { 00037 k=(*idum)/IQ1; 00038 *idum=IA1*(*idum-k*IQ1)-k*IR1; 00039 if (*idum < 0) 00040 *idum += IM1; 00041 if (j < NTAB) 00042 iv[j] = *idum; 00043 } 00044 00045 iy=iv[0]; 00046 } 00047 00048 k=(*idum)/IQ1; 00049 *idum=IA1*(*idum-k*IQ1)-k*IR1; 00050 00051 if (*idum < 0) 00052 *idum += IM1; 00053 00054 k=idum2/IQ2; 00055 idum2=IA2*(idum2-k*IQ2)-k*IR2; 00056 00057 if (idum2 < 0) 00058 idum2 += IM2; 00059 00060 j=iy/NDIV; 00061 iy=iv[j]-idum2; 00062 iv[j] = *idum; 00063 00064 if (iy < 1) 00065 iy += IMM1; 00066 if ((temp=AM*iy) > RNMX) 00067 return RNMX; 00068 else 00069 return temp; 00070 } 00071 00072 00073 float gasdev(long *idum) 00074 { 00075 float ran1(long *idum); 00076 static int iset=0; 00077 static float gset; 00078 float fac,rsq,v1,v2; 00079 00080 if (*idum < 0) iset=0; 00081 00082 if (iset == 0) 00083 { 00084 do 00085 { 00086 v1=2.0*ran1(idum)-1.0; 00087 v2=2.0*ran1(idum)-1.0; 00088 rsq=v1*v1+v2*v2; 00089 } 00090 while (rsq >= 1.0 || rsq == 0.0); 00091 00092 fac=sqrt(-2.0*log(rsq)/rsq); 00093 00094 gset=v1*fac; 00095 iset=1; 00096 00097 return v2*fac; 00098 } 00099 else 00100 { 00101 iset=0; 00102 return gset; 00103 } 00104 }

Generated on Mon Nov 22 11:12:41 2004 for ImprolaLib by doxygen 1.3.7