[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RandomGen. Reply
Simon Peyton-Jones <simonpj@microsoft.com> wrote on Feb 2 2000:
> The library is currently based on the RandomGen class,
> whose signature is:
>
> class RandomGen g wher
> next :: g -> (Int, g)
> split :: g -> (g, g)
>
> The difficulty is that there is absolutely no robust way to
> use such a generator to generate random numbers uniformly
> distributed in a given range. Why not? Because there's no
> clue as to the precise range of Ints produced by next.
> [..]
Fergus Henderson <fjh@cs.mu.oz.au> replies
H> [..]
H> Wouldn't it be easiest if the RNG just guaranteed to
H> return integers that range over the whole range of `Int'?
H> Note that the range of `Int' can be obtained using the `minBound'
H> and `maxBound' functions in the standard prelude.
Exactly.
| * The next operation allows one to extract at least 30 bits (one
| Int's worth) from the generator, returning a new generator as
| well. The integer returned may be positive or negative.
H> That wording is a little unclear, so I suggest clarifying
H> it as follows:
H>
H> * The next operation allows one to extract a pseudo-random Int
H> from the generator, returning a new generator as well.
H> The integer returned may be positive or negative.
H> Over a sufficiently large sequence of calls to next,
H> the integers returned should be uniformly distributed
H> over the whole range of Int (from minBound to maxBound,
H> inclusive).
H>
H> If that clarification were made, there would be no need to
H> introduce the `genRange' method that Simon P-J suggested.
Indeed, why not follow this simple approach?
And the line `The integer returned may be positive or negative.'
can be omitted.
Because it follows from the next sentence.
------------------
Sergey Mechveliani
mechvel@botik.ru