```Date: Dec 21, 2007 9:42 AM
Author: briggs@encompasserve.org
Subject: Re: Random numbers

In article <tqenm3pq5fh6p8raf7ukplqhrflfrfhjuq@4ax.com>, quasi <quasi@null.set> writes:> On 21 Dec 2007 14:53:38 +0200, Phil Carmody> <thefatphil_demunged@yahoo.co.uk> wrote:> >>quasi <quasi@null.set> writes:>>> On 21 Dec 2007 14:33:08 +0200, Phil Carmody>>> <thefatphil_demunged@yahoo.co.uk> wrote:>>> >>> >John <iamachamp@gmail.com> writes:>>> >> Given a function that returns a random number between 1-5, write one>>> >> that returns a random number between 1-7 for the case when it should>>> >> be integer and for the case it can be real.>>> >>>> >int rand1to7i()>>> >{>>> >  int r1=rand1to5i();>>> >  if(r1==5) { r1+=rand1to5i()/2; }>>> >  return r1;>>> >}>>> >>> Fatally flawed.>>>>Wrong. Care to back up your claim? Between you and me, I >>reckon you've not thought about my response enough.> > Yes, do a simulation, and then _you_ think about it.> >>> >double rand1to7d()>>> >{>>> >  return rand1to5d()+(rand1to5d()-1)/2;>>> >}>>> >>> Inefficient -- uses 2 RNG calls, instead of 1.>>>>Wrong. If you stretch the numbers out, you'll leave gaps>>between them, these aren't actual reals, you did realise >>that, right? You *need* 2 calls to ensure that you leave >>no gaps.> > Forget gaps -- your method is biased!The problem statement does not require the output distributionto be unbiased, gap-free or that it even cover the stated range.Accordingly, the following code solves the problem as written:double rand1to7d() { return rand1to5d();}If you wish to write code that produces a distribution thatcovers every model number in the stated range with probability inproportion to the measure of the set of real numbers in the rangethat are nearer to the given model number than to any other in therange, you'll probably need some details about the underlying floatingpoint model.At this level of detail, it becomes clear that rand1to5d must selectfrom a finite set of possibilities with probabilities that are allmultiples of a fixed finite probability.Barring lucky happenstance it follows that any implementationof rand1to7d using rand1to5d as its source of randomness must involvea loop.
```