From: Raymond Hettinger Date: Sun, 23 Mar 2008 19:37:53 +0000 (+0000) Subject: Adopt Nick's suggestion for useful default arguments. X-Git-Tag: v2.6a2~147 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c4f7bab0a0cd208bcab3c4f6cd8324ed8d08f98e;p=python Adopt Nick's suggestion for useful default arguments. Clean-up floating point issues by adding true division and float constants. --- diff --git a/Doc/library/random.rst b/Doc/library/random.rst index 505cc81a90..a064ac4246 100644 --- a/Doc/library/random.rst +++ b/Doc/library/random.rst @@ -193,7 +193,12 @@ be found in any statistics text. .. function:: triangular(low, high, mode) Return a random floating point number *N* such that ``low <= N < high`` - and with the specified *mode* between those bounds. + and with the specified *mode* between those bounds. + + If *mode* is not specified or is ``None``, it defaults to the midpoint + between the upper and lower bounds, producing a symmetric distribution. + + The default values for *low* and *high* are zero and one. .. function:: betavariate(alpha, beta) diff --git a/Lib/random.py b/Lib/random.py index 13125e2af2..bd8679fea9 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -39,6 +39,7 @@ General notes on the underlying Mersenne Twister core generator: """ +from __future__ import division from warnings import warn as _warn from types import MethodType as _MethodType, BuiltinMethodType as _BuiltinMethodType from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil @@ -353,7 +354,7 @@ class Random(_random.Random): ## -------------------- triangular -------------------- - def triangular(self, low, high, mode): + def triangular(self, low=0.0, high=1.0, mode=None): """Triangular distribution. Continuous distribution bounded by given lower and upper limits, @@ -363,10 +364,10 @@ class Random(_random.Random): """ u = self.random() - c = (mode - low) / (high - low) + c = 0.5 if mode is None else (mode - low) / (high - low) if u > c: - u = 1 - u - c = 1 - c + u = 1.0 - u + c = 1.0 - c low, high = high, low return low + (high - low) * (u * c) ** 0.5