random number including 1 - i.e. [0,1]
Mark Dickinson
dickinsm at gmail.com
Wed Jun 10 23:47:53 CEST 2009
Robert Kern <robert.kern at gmail.com> wrote:
> On 2009-06-10 15:54, Mark Dickinson wrote:
>> [...] I'm not sure I'm capable of coming up with extra wording
>> for the docs that won't just cause more confusion, so I'll leave that
>> to someone else.
>
> I did make a concrete suggestion.
Yes, you did. Thank you. Submitted as http://bugs.python.org/issue6261
>
>> I seem to recall that when this originally came up in the tracker
>> (issue 4979) the fun part of the analysis was proving that
>> random.uniform(a, b) can never produce values *outside* the interval
>> [a, b]. :-)
>
> I was a bit worried about that part myself for a little bit. :-)
>
I think the key was to show that multiplication by (1-2**-53) (the
largest possible output of random.random()) always makes any float
smaller in magnitude[*], so assuming that a <= b the value of the Python
expression random.random()*(b-a) can't be larger than the exact real
value of (b-a), which in turn means that a + random.random()*(b-a)
can't exceed b.
[*] Well, almost. This isn't true for subnormals. But if the result
of the subtraction b-a is subnormal then that subtraction was also
necessarily exact, so everything works in this case, too.
And of course I'm wrong. I shouldn't have said *never*, above:
>>> from random import uniform
>>> uniform(-1e308, 1e308)
inf
:-(
Somehow this doesn't seem worth either fixing or documenting, though.
--
Mark Dickinson
More information about the Python-list
mailing list