Changeset 26577
- Timestamp:
- 11/09/21 12:50:43 (3 years ago)
- Location:
- issm/trunk-jpl/src/c/shared/Random
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/shared/Random/randomgenerator.cpp
r26576 r26577 6 6 #include "./randomgenerator.h" 7 7 8 class uniform_distribution 9 { 8 #undef M_PI 9 #define M_PI 3.141592653589793238462643 10 10 11 };12 11 13 class normal_distribution 14 { 12 uniform_distribution_rnd::uniform_distribution_rnd(){/*{{{*/ 15 13 16 }; 14 a = 1103515245; // BSD Formula 15 c = 12345; // BSD Formula 16 m = 2147483648; // BSD Formula 17 _seed = 0; 18 lbound = 0.0; 19 ubound = 1.0; 20 return; 21 } 22 /*}}}*/ 23 uniform_distribution_rnd::uniform_distribution_rnd(double lower,double upper){/*{{{*/ 24 25 a = 1103515245; // BSD Formula 26 c = 12345; // BSD Formula 27 m = 2147483648; // BSD Formula 28 _seed = 0; 29 lbound = lower; 30 ubound = upper; 31 return; 32 } 33 /*}}}*/ 34 uniform_distribution_rnd::~uniform_distribution_rnd(){} 35 void uniform_distribution_rnd::seed( unsigned int s ) { _seed = s; } 36 unsigned int uniform_distribution_rnd::get_seed() { return _seed; } 37 double uniform_distribution_rnd::generator() { 38 _seed = ( a * _seed + c ) % m ; 39 return (ubound-lbound)*(double) _seed/ m + lbound; 40 } 41 42 43 normal_distribution_rnd::normal_distribution_rnd(){/*{{{*/ 44 45 _seed = 0; 46 mean = 0; 47 sdev = 1.0; 48 return; 49 } 50 /*}}}*/ 51 normal_distribution_rnd::normal_distribution_rnd(double m,double s){/*{{{*/ 52 53 _seed = 0; 54 mean = m; 55 sdev = s; 56 return; 57 } 58 /*}}}*/ 59 normal_distribution_rnd::~normal_distribution_rnd(){} 60 void normal_distribution_rnd::seed( unsigned int s ) { _seed = s; } 61 double normal_distribution_rnd::generator(){/*{{{*/ 62 63 uniform_distribution_rnd unifdistri; 64 unifdistri.seed(_seed); 65 66 double u1 = unifdistri.generator(); 67 double u2 = unifdistri.generator(); 68 69 double R = sqrt(-2*log(u1)); 70 double theta = 2*M_PI*u2; 71 72 seed(unifdistri.get_seed()); 73 74 return mean + sdev * (R*cos(theta)); 75 76 } 77 /*}}}*/ -
issm/trunk-jpl/src/c/shared/Random/randomgenerator.h
r26576 r26577 12 12 { 13 13 14 private:14 private: 15 15 16 unsigned int a;17 unsigned int c;18 unsigned int m;19 unsigned _seed;20 double a1;21 double a2;16 unsigned int a; //multiplier of the linear congruential generator 17 unsigned int c; //increment of the linear congruential generator 18 unsigned int m; // modulo of the linear congruential generator 19 unsigned int _seed; // seed value 20 double lbound; // lower bound of uniform distribution 21 double ubound; // upper bound of uniform distribution 22 22 23 int drnd() { return( _seed = ( a * _seed + c ) % m ); }23 public: 24 24 25 public: 25 /*constructors, destructors: */ 26 uniform_distribution_rnd(); 27 uniform_distribution_rnd(double a_1, double a_2); 28 ~uniform_distribution_rnd(); 26 29 27 /*constructors, destructors: */ 28 uniform_distribution_rnd(); 29 uniform_distribution_rnd(double a_1, double a_2); 30 ~uniform_distribution_rnd(); 31 32 void seed( unsigned int s ) { _seed = s; } 33 unsigned int get_seed() { return _seed; } 34 double rnd() { return (a2-a1)*(double) drnd()/ m + a1; } 30 void seed( unsigned int s ); 31 unsigned int get_seed(); 32 double generator(); 35 33 36 34 }; … … 39 37 { 40 38 41 private:42 unsigned _seed;43 double mean;44 double sdev;39 private: 40 unsigned int _seed; // seed value 41 double mean; // mean value 42 double sdev; // standard deviation 45 43 46 public: 47 normal_distribution_rnd() : _seed( 0 ), mean( 0), sdev(1.0) {} 48 normal_distribution_rnd(double m,double s) : _seed( 0 ), mean( m ), sdev(s) {} 49 void seed( unsigned int s ) { _seed = s; } 50 double rnd(); 44 public: 45 46 /*constructors, destructors: */ 47 normal_distribution_rnd(); 48 normal_distribution_rnd(double m,double s); 49 ~normal_distribution_rnd(); 50 51 void seed( unsigned int s ); 52 double generator(); 51 53 52 54 };
Note:
See TracChangeset
for help on using the changeset viewer.