Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Feb 2003 01:22:00 -0800
From:      David Schultz <dschultz@uclink.Berkeley.EDU>
To:        Paul Herman <pherman@frenchfries.net>
Cc:        phk@phk.freebsd.dk, Peter Jeremy <peterjeremy@optushome.com.au>, FreeBSD Hackers <hackers@FreeBSD.ORG>
Subject:   Re: arc4random() range
Message-ID:  <20030219092200.GA26914@HAL9000.homeunix.com>
In-Reply-To: <20030219003725.W240-100000@mammoth.eat.frenchfries.net>
References:  <77946.1045642969@critter.freebsd.dk> <20030219003725.W240-100000@mammoth.eat.frenchfries.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Thus spake Paul Herman <pherman@frenchfries.net>:
> On Wed, 19 Feb 2003 phk@phk.freebsd.dk wrote:
> 
> > In message <20030218232210.T240-100000@mammoth.eat.frenchfries.net>, Paul Herma
> > n writes:
> >
> > >  arc4random() returns random numbers in the range of 0 to
> > >  (2**32)-1, and therefore has twice the range of RAND_MAX.
> >
> > Good.
> >
> > >  EXAMPLES
> > >  The following produces a drop-in replacement for the traditional
> > >  random() and rand() functions using arc4random():
> > >      #define arc4random31()   (arc4random() & 0x7FFFFFFF)
> >
> > Not good.  Only true on 32 bit archs.
> 
> Heh?
> 
> random(3) produces numbers between 0 and RAND_MAX on my alpha.
> random(3) produces numbers between 0 and RAND_MAX on my i386.
> (arc4random() & 0x7FFFFFFF) produces numbers between 0 and RAND_MAX on my alpha.
> (arc4random() & 0x7FFFFFFF) produces numbers between 0 and RAND_MAX on my i386.

Your code should work fine, although it assumes RAND_MAX is
2^31-1, rather than using the symbolic constant.  But I think if
people were really interested in using arc4random() as a drop-in
replacement for random(), they would have already written a libc
function to mimic random().  Just documenting the range of
arc4random() should be sufficient.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030219092200.GA26914>