Kaydet (Commit) c4f7bab0 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Adopt Nick's suggestion for useful default arguments.

Clean-up floating point issues by adding true division and float constants.
üst bbc50eaf
...@@ -193,7 +193,12 @@ be found in any statistics text. ...@@ -193,7 +193,12 @@ be found in any statistics text.
.. function:: triangular(low, high, mode) .. function:: triangular(low, high, mode)
Return a random floating point number *N* such that ``low <= N < high`` 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) .. function:: betavariate(alpha, beta)
......
...@@ -39,6 +39,7 @@ General notes on the underlying Mersenne Twister core generator: ...@@ -39,6 +39,7 @@ General notes on the underlying Mersenne Twister core generator:
""" """
from __future__ import division
from warnings import warn as _warn from warnings import warn as _warn
from types import MethodType as _MethodType, BuiltinMethodType as _BuiltinMethodType 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 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): ...@@ -353,7 +354,7 @@ class Random(_random.Random):
## -------------------- triangular -------------------- ## -------------------- triangular --------------------
def triangular(self, low, high, mode): def triangular(self, low=0.0, high=1.0, mode=None):
"""Triangular distribution. """Triangular distribution.
Continuous distribution bounded by given lower and upper limits, Continuous distribution bounded by given lower and upper limits,
...@@ -363,10 +364,10 @@ class Random(_random.Random): ...@@ -363,10 +364,10 @@ class Random(_random.Random):
""" """
u = self.random() u = self.random()
c = (mode - low) / (high - low) c = 0.5 if mode is None else (mode - low) / (high - low)
if u > c: if u > c:
u = 1 - u u = 1.0 - u
c = 1 - c c = 1.0 - c
low, high = high, low low, high = high, low
return low + (high - low) * (u * c) ** 0.5 return low + (high - low) * (u * c) ** 0.5
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment