summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2009-04-09 22:37:59 +0000
committerfrosch <frosch@openttd.org>2009-04-09 22:37:59 +0000
commitd3de4ba91b5010cdb65acb5cc217f5beba16b9c0 (patch)
tree8ba771f3ce39684d75bc06179bcdc596845c65c2 /src
parent28bce241fde51391b8f7be286962afd0b86a1edf (diff)
downloadopenttd-d3de4ba91b5010cdb65acb5cc217f5beba16b9c0.tar.xz
(svn r16006) -Fix (r0): Chance16() did not work for b = 1. Also transform the formula to not use divisions.
Diffstat (limited to 'src')
-rw-r--r--src/core/random_func.hpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/core/random_func.hpp b/src/core/random_func.hpp
index 82f751003..397e69667 100644
--- a/src/core/random_func.hpp
+++ b/src/core/random_func.hpp
@@ -108,7 +108,7 @@ static FORCEINLINE uint32 InteractiveRandomRange(uint16 max)
* Checks if a given randomize-number is below a given probability.
*
* This function is used to check if the given probability by the fraction of (a/b)
- * is greater than low 16 bits of the given randomize-number v.
+ * is greater than low 16 bits of the given randomize-number r.
*
* Do not use this function twice on the same random 16 bits as it will yield
* the same result. One can use a random number for two calls to Chance16I,
@@ -117,12 +117,12 @@ static FORCEINLINE uint32 InteractiveRandomRange(uint16 max)
* @param a The numerator of the fraction
* @param b The denominator of the fraction, must of course not be null
* @param r The given randomize-number
- * @return True if v is less or equals (a/b)
+ * @return True if the probability given by r is less or equal to (a/b)
*/
static FORCEINLINE bool Chance16I(const uint a, const uint b, const uint32 r)
{
assert(b != 0);
- return (uint16)r < (uint16)(((a << 16) + b / 2) / b);
+ return (((uint16)r * b + b / 2) >> 16) < a;
}
/**