summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/random.cc
diff options
context:
space:
mode:
authorPete Hurst <pete@streamuniverse.tv>2013-05-23 02:14:55 +0100
committerPete Hurst <pete@streamuniverse.tv>2013-06-23 05:01:11 +0100
commit6c024bad6f0942116c508e5948fdf40c3a0d4dfe (patch)
treeb1989a9bae12a7015db8f8c76abc8f8ecb189409 /crawl-ref/source/random.cc
parentc8ffa77dd4fada4dd85c5007889014b8c295b204 (diff)
downloadcrawl-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.cc25
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]