Changeset 154 for cpp/frams/util/rndutil.cpp
- Timestamp:
- 03/01/14 22:25:20 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/util/rndutil.cpp
r121 r154 9 9 unsigned short pseudornd(short x) 10 10 { 11 static long seed=0;12 long y;13 if (x<=0) {seed=-x; return 0;}14 seed=(y=(3677*seed+3680)&0x7fffffff)-1;15 return (unsigned short)(((unsigned short)y)%(x));//rzutowanie y->unsigned short to pewnie blad bo zmniejsza wartosc ktorej sie potem robi modulo, ale pseudornd sluzy chyba tylko do generowania randomowych world map? i modulo i tak jest tam bardzo male, lepiej niczego nie zmieniac bo po co maja pliki z ustawieniami zmienic swoje przypadkowe znaczenie11 static long seed = 0; 12 long y; 13 if (x <= 0) { seed = -x; return 0; } 14 seed = (y = (3677 * seed + 3680) & 0x7fffffff) - 1; 15 return (unsigned short)(((unsigned short)y) % (x)); //rzutowanie y->unsigned short to pewnie blad bo zmniejsza wartosc ktorej sie potem robi modulo, ale pseudornd sluzy chyba tylko do generowania randomowych world map? i modulo i tak jest tam bardzo male, lepiej niczego nie zmieniac bo po co maja pliki z ustawieniami zmienic swoje przypadkowe znaczenie 16 16 } 17 17 18 18 double CustomRnd(double *tab) 19 19 { 20 double *range=tab+1+2*randomN((int)(0.5+tab[0]));21 return range[0]+rnd0N(range[1]-range[0]);20 double *range = tab + 1 + 2 * randomN((int)(0.5 + tab[0])); 21 return range[0] + rnd0N(range[1] - range[0]); 22 22 } 23 23 24 24 double RandomGener::Uni(double begin, double end) 25 25 { 26 return begin+rnd01*(end-begin);26 return begin + rnd01*(end - begin); 27 27 } 28 28 29 29 double RandomGener::GaussStd() 30 30 { 31 if (isNextGauss) {isNextGauss=0; return nextGauss;}32 double v1,v2,s;33 do {34 v1=2*rnd01-1; //-1..135 v2=2*rnd01-1; //-1..136 s=v1*v1+v2*v2;37 } while (s>=1);38 double mult=sqrt(-2*log(s)/s);39 nextGauss=v2*mult;40 isNextGauss=1;41 return v1*mult;31 if (isNextGauss) { isNextGauss = 0; return nextGauss; } 32 double v1, v2, s; 33 do { 34 v1 = 2 * rnd01 - 1; //-1..1 35 v2 = 2 * rnd01 - 1; //-1..1 36 s = v1*v1 + v2*v2; 37 } while (s >= 1); 38 double mult = sqrt(-2 * log(s) / s); 39 nextGauss = v2*mult; 40 isNextGauss = 1; 41 return v1*mult; 42 42 } 43 43 44 double RandomGener::Gauss(double m,double s) 45 {return m+s*GaussStd();} 44 double RandomGener::Gauss(double m, double s) 45 { 46 return m + s*GaussStd(); 47 } 46 48 47 49 RandomGener RndGen;
Note: See TracChangeset
for help on using the changeset viewer.