New submission from Max Hailperin <m...@gustavus.edu>:

The documentation for random.uniform says that random.uniform(a,b) 
should return a number strictly less than b, assuming a<b.  (The result 
should be strictly less than a if a>b.)  Thus both of the following 
expressions should always evaluate to False:

a<b and b in [random.uniform(a,b) for i in range(20)]
a<b and b in [random.uniform(b,a) for i in range(20)]

Yet both of them evaluate to True (except, presumably, one time in a 
million) after doing the following assignments:

a = 1.0
b = 1.0 + 2.0**-52

Other values of a and b also exist for which random.uniform will 
sometimes return its upper limit.  (For example, the -52 can be 
increased to -51, -50, etc., with correspondingly less frequent 
violations of the spec.)

Because this is a case where the code is violating an explicit 
specification in the documentation, I'm reporting it as a behavior bug.  
But perhaps the behavior is as intended and the documentation is at 
fault.  For that reason, I'm also emailing d...@python.org.
 
The documentation would in any case need a little touching up, in that 
it has a self-contradictory specification for the case where a=b.  There 
is no value N for which a<=N<b, given a=b.  That minor touch-up could be 
combined with allowing the behavior described in this bug report, if 
that behavior is in fact desired.

----------
components: Library (Lib)
messages: 80062
nosy: hailperin
severity: normal
status: open
title: random.uniform can return its upper limit
type: behavior
versions: Python 3.0

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue4979>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to