From: Jason Alexander Newsgroups: comp.os.msdos.djgpp Subject: Re: Random integers Date: Tue, 24 Mar 1998 12:00:26 -0800 Organization: University of California, Irvine Lines: 27 Message-ID: <351810D9.47E35207@ea.oac.uci.edu> References: <01bd5744$ee33b280$LocalHost AT PIETER> NNTP-Posting-Host: pv1821.pv.reshsg.uci.edu Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Erik Max Francis wrote: >Use > > rand()%n + 1 > >which will give you a random number betwen 1 and n, inclusive. > >Note that pseudorandom number generators tend to be poor in their lower >significant bits, so this is sometimes not an ideal solution. I believe one could easily get around this by bitshifting the result of rand() to move the high-order bits so that the mod operation uses them. First, figure out how many bits are needed to represent the number n (call this N) and then use ((rand() >> (32-N)) % n) + 1 I haven't tested this, but either it (or something very similar to it) should work, right? Of course, if the random numbers will be called many times, 32-N should be replaced by the actual value to avoid the arithmetic operation each time the random number generator is called. (Maybe the gcc optimizer does this already... I don't know) Jason