diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2018-07-15 18:00:09 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2018-07-15 18:00:09 +0200 |
commit | 82d1d89d2e68db56890c593a6428cdcbed1105f2 (patch) | |
tree | 7341711df7d1dc24bfec7b408e5b1fc3eeba7a10 /numlib/rand.c | |
parent | d27d024c441a3912ac2959dff6183abf0e199d78 (diff) | |
parent | 711b90e2fe8e1b842c3181a6909af1e432fe0fdc (diff) |
Merge branch 'feature/upstream' into develop
Diffstat (limited to 'numlib/rand.c')
-rwxr-xr-x | numlib/rand.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/numlib/rand.c b/numlib/rand.c index 9e58de3..e2fdfdf 100755 --- a/numlib/rand.c +++ b/numlib/rand.c @@ -39,12 +39,18 @@ double ranno(void) { return rand32_th(NULL, 0) / 4294967295.0; } -/* Return a random double in the range min to max */ +/* Return a uniform random double in the range min to max */ double d_rand(double min, double max) { return d_rand_th(NULL, min, max); } +/* Return a squared distribution random double in the range min to max */ +double +d2_rand(double min, double max) { + return d2_rand_th(NULL, min, max); +} + /* Return a random integer in the range min to max inclusive */ int i_rand(int min, int max) { @@ -81,6 +87,7 @@ unsigned int seed /* Optional seed. Non-zero re-initialized with that seed */ p = &g_rand; if (seed != 0) { +//printf("~1 rand 0x%x seed 0x%x\n",p,seed); p->pvs_inited = 0; p->ran = seed; } @@ -98,21 +105,29 @@ unsigned int seed /* Optional seed. Non-zero re-initialized with that seed */ p->last = p->pvs[i]; /* Value generated */ p->pvs[i] = p->ran = PSRAND32(p->ran); /* New value */ +//printf("~1 rand 0x%x ret 0x%x\n",p,p->last-1); return p->last-1; } /* return a random number between 0.0 and 1.0 */ /* based on rand32 */ double ranno_th(rand_state *p) { - return rand32_th(NULL, 0) / 4294967295.0; + return rand32_th(p, 0) / 4294967295.0; } -/* Return a random double in the range min to max */ +/* Return a uniform random double in the range min to max */ double d_rand_th(rand_state *p, double min, double max) { return min + (max - min) * ranno_th(p); } +/* Return a squared distribution random double in the range min to max */ +double +d2_rand_th(rand_state *p, double min, double max) { + double val = ranno_th(p); + return min + (max - min) * val * val; +} + /* Return a random integer in the range min to max inclusive */ int i_rand_th(rand_state *p, int min, int max) { |