diff options
author | Pete Hurst <pete@streamuniverse.tv> | 2013-05-23 02:14:55 +0100 |
---|---|---|
committer | Pete Hurst <pete@streamuniverse.tv> | 2013-06-23 05:01:11 +0100 |
commit | 6c024bad6f0942116c508e5948fdf40c3a0d4dfe (patch) | |
tree | b1989a9bae12a7015db8f8c76abc8f8ecb189409 /crawl-ref/source/random.cc | |
parent | c8ffa77dd4fada4dd85c5007889014b8c295b204 (diff) | |
download | crawl-ref-6c024bad6f0942116c508e5948fdf40c3a0d4dfe.tar.gz crawl-ref-6c024bad6f0942116c508e5948fdf40c3a0d4dfe.zip |
Add new random functions random_real_inc, random_real_avg, random_range_real
random_real_inc
Returns a value [0..1]. random_real() was not inclusive of 1.0.
random_real_avg
Returns a real value taking the average of a given number of rolls.
random_range_real
Returns a real value in a given range (with optional number of rolls).
Diffstat (limited to 'crawl-ref/source/random.cc')
-rw-r--r-- | crawl-ref/source/random.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/crawl-ref/source/random.cc b/crawl-ref/source/random.cc index d52c0a7993..f17e4716b5 100644 --- a/crawl-ref/source/random.cc +++ b/crawl-ref/source/random.cc @@ -247,6 +247,31 @@ double random_real() return random_int() / 4294967296.0; } +// range [0, 1.0] +double random_real_inc() +{ + return random_int() / 4294967295.0; +} + +// range [0, 1.0], weighted to middle with multiple rolls +double random_real_avg(int rolls) +{ + ASSERT(rolls > 0); + double sum = 0; + + for (int i = 0; i < rolls; i++) + sum += random_real_inc(); + + return (sum / (double)rolls); +} + +// range [low, high], weighted to middle with multiple rolls +double random_range_real(double low, double high, int nrolls) +{ + const int roll = random_real_avg(nrolls) * (high - low); + return low + roll; +} + // Roll n_trials, return true if at least one succeeded. n_trials might be // not integer. // [0, 1] |