   Subject: Re: Non-randomly distributed random numbers (a challenge)
      Date: Sun, 18 May 97 00:25:31 CEST
      From: dkw@wolferts.sub.de (Klaus Wolferts)
Newsgroups: comp.sys.hp48

Bruce Horrocks <Bruce.Horrocks@gecm.com> writes:
>
> I want to produce a program that generates integer random numbers that
> are not uniformly distributed, i.e. like loaded dice.
>
> Example:
>
> N     %
> -     --
> 1     30
> 2     15
> 3     40
> 4      5
> 5     10
>
> The generator should produce numbers from one to five but distributed
> according to their percentage frequency, thus three would be returned
> 40% of the time.
>
> I can do this by getting random numbers from 1 to 100 and then using an
> IF statement to see whether the number falls between 1 and 30 to return
> 1, between 31 and 45 to return 2 etc etc.
>
> I was wondering if there is a more efficient way of doing this that
> avoids the IF statement (because I might well have more than just 5
> bands).

Generate a list or an array of 20 elements, fill them with the values:
  1...6:  1
  7...9:  2
 10..17:  3
     18:  4
 19..20:  5

Generate integer random numbers 1..20 and use them as an index to get
the element pointed to by that index.

Klaus

--
 dkw@wolferts.sub.de | Dr.-Ing. Klaus Wolferts
 Tel: +49 721 706016 | Ingenieurbro fr EDV + Elektronik
 Fax: +49 721 706017_|_Mitteltorstr. 45, D-76149 Karlsruhe (Nrt)
