Changeset 26602
- Timestamp:
- 11/10/21 18:45:38 (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
r26599 r26602 5 5 #include <iostream> 6 6 #include "./randomgenerator.h" 7 #include <cmath> 8 7 9 8 10 #undef M_PI … … 20 22 } 21 23 /*}}}*/ 24 rnd_uniform_distribution::rnd_uniform_distribution(double lower,double upper){/*{{{*/ 25 26 a = 1103515245; // BSD Formula 27 c = 12345; // BSD Formula 28 m = 2147483648; // BSD Formula 29 _seed = 0; 30 lbound = lower; 31 ubound = upper; 32 return; 33 } 34 /*}}}*/ 35 rnd_uniform_distribution::~rnd_uniform_distribution(){} 36 void rnd_uniform_distribution::seed( unsigned int s ) { _seed = s; } 37 unsigned int rnd_uniform_distribution::get_seed() { return _seed; } 38 double rnd_uniform_distribution::generator() { 39 _seed = ( a * _seed + c ) % m ; 40 return (ubound-lbound)*(double) _seed/ m + lbound; 41 } 42 43 44 rnd_normal_distribution::rnd_normal_distribution(){/*{{{*/ 45 46 _seed = 0; 47 mean = 0; 48 sdev = 1.0; 49 return; 50 } 51 /*}}}*/ 52 rnd_normal_distribution::rnd_normal_distribution(double m,double s){/*{{{*/ 53 54 _seed = 0; 55 mean = m; 56 sdev = s; 57 return; 58 } 59 /*}}}*/ 60 rnd_normal_distribution::~rnd_normal_distribution(){} 61 void rnd_normal_distribution::seed( unsigned int s ) { _seed = s; } 62 double rnd_normal_distribution::generator(){/*{{{*/ 63 64 rnd_uniform_distribution unifdistri; 65 unifdistri.seed(_seed); 66 67 double u1 = unifdistri.generator(); 68 double u2 = unifdistri.generator(); 69 70 double R = sqrt(-2*log(u1)); 71 double theta = 2*M_PI*u2; 72 73 seed(unifdistri.get_seed()); 74 75 return mean + sdev * (R*cos(theta)); 76 77 } 78 /*}}}*/ -
issm/trunk-jpl/src/c/shared/Random/randomgenerator.h
r26599 r26602 5 5 #ifndef _RANDOMGENERATOR_H_ 6 6 #define _RANDOMGENERATOR_H_ 7 8 /*Headers:*/9 /*{{{*/10 #include <cmath>11 /*}}}*/12 7 13 8 #undef M_PI … … 29 24 /*constructors, destructors: */ 30 25 rnd_uniform_distribution(); 31 rnd_uniform_distribution(double a_1,double a_2) : _seed( 0 ), a( 1103515245 ), c( 12345 ), m( 2147483648 ), lbound(a_1), ubound(a_2) {}32 ~rnd_uniform_distribution() {}26 rnd_uniform_distribution(double a_1,double a_2); 27 ~rnd_uniform_distribution(); 33 28 34 void seed( unsigned int s ) { _seed = s; } 35 unsigned int get_seed() { return _seed; } 36 double generator(){ 37 _seed = ( a * _seed + c ) % m; 38 return (ubound-lbound)*(double) _seed/ m + lbound; 39 } 29 void seed( unsigned int s ); 30 unsigned int get_seed(); 31 double generator(); 40 32 41 33 }; … … 52 44 53 45 /*constructors, destructors: */ 54 rnd_normal_distribution() : _seed( 0 ), mean( 0), sdev(1.0) {}55 rnd_normal_distribution(double m,double s) : _seed( 0 ), mean( m ), sdev(s) {}56 ~rnd_normal_distribution() {}46 rnd_normal_distribution(); 47 rnd_normal_distribution(double m,double s); 48 ~rnd_normal_distribution(); 57 49 58 void seed( unsigned int s ) { _seed = s; } 59 double generator() 60 { 61 rnd_uniform_distribution unifdistri; 62 unifdistri.seed(_seed); 63 64 double u1 = unifdistri.generator(); 65 double u2 = unifdistri.generator(); 66 67 double R = sqrt(-2*log(u1)); 68 double theta = 2*M_PI*u2; 69 70 seed(unifdistri.get_seed()); 71 72 return mean + sdev * (R*cos(theta)); 73 74 } 50 void seed( unsigned int s ); 51 double generator(); 75 52 76 53 };
Note:
See TracChangeset
for help on using the changeset viewer.