James Kanze
10/20/2008 7:59:00 AM
On Oct 19, 11:26 pm, Pete Becker <p...@versatilecoding.com> wrote:
> On 2008-10-19 16:03:39 -0400, gw7...@aol.com said:
> > On 19 Oct, 10:43, peter koch <peter.koch.lar...@gmail.com> wrote:
> >> On 19 Okt., 09:37, remlostime <remlost...@gmail.com> wrote:
> >>> i use g++ to generater rand number, now i find that the
> >>> RAND_MAX is 32367 in my computer, how can i make a bigger
> >>> rand number( the number is wihin in the integer(2^32-1))
> >> You have several options: one is to use a library such as
> >> boost which gives you several options to choose different
> >> random number generators of high quality. Another is to
> >> compose your number by calling rand several times. To
> >> illustrate: if your random number only gave values from 0
> >> to 9, but you needed values from 0 to 99, the solution
> >> would my to use rand()*10 + rand(). I am sure you can
> >> extrapolate from here ;-)
> > I don't think your second approach will work. For example,
> > suppose your random number generator gives only ten values
> > and produces the sequence:
> > 1, 6, 4, 7, 9, 0, 3, 5, 2, 8, 1, 6, etc
> > then your improved version will only ever give the numbers
> > 16, 64, 47, 79, 90, 3, 35, 52, 28 and 81, instead of the
> > full range from 0 to 99.
> Well, yes, if the generator produces a sequence of length ten,
> then there's not much you can do. But producing random digits
> from 0 to 9 doesn't mean producing a sequence of length ten.
> Typically a random number generator has a much longer period
> than that. If the period is long enough, there's no problem
> tiling the values, as the second approach suggests.
Yes and no. The sequence should be significantly longer than
the value one is trying to generate; in other words, the value
actually returned by rand() shouldn't represent the entire
internal state of the machine.
For historical reasons, at in some environments, RAND_MAX is
defined as 32767, even though the actual generator uses 31 or 32
bits internally (and has an actual period of around 2^31). If
this is the case, then the proposed technique is fine.
Similarly, rand() is required to return an int---a number of
quality generators use significantly more state internally. In
such cases, the technique is also valid. If the generator's
period is only RAND_MAX, however, it's likely to be too pretty
bad (but depending on the use, maybe "good enough" anyway).
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34