Path: cactus.org!cs.utexas.edu!howland.reston.ans.net!europa.eng.gtefsd.com! + ulowell!MathWorks.Com!transfer.stratus.com!galt.sw.stratus.com!cme From: cme@galt.sw.stratus.com (Carl Ellison) Newsgroups: sci.crypt Subject: Re: modran(x) Date: 24 Feb 1994 21:01:16 GMT Organization: Stratus Computer, Marlboro MA Lines: 27 Distribution: world Message-ID: <2kj4is$akq@transfer.stratus.com> References: <17.11880.864.0N63EC25@almac.co.uk> NNTP-Posting-Host: galt.sw.stratus.com In article <17.11880.864.0N63EC25@almac.co.uk> keith.willis@almac.co.uk (Keith W illis) writes: > > > In the sci.crypt FAQ, section 8.13, it says that a modran(x) > function which returns "a uniformly distributed random integer > in the interval [0..x-1]" cannot be achieved by a simple > (ranno() % x). What exactly is the problem with this > approach? > > More generally, given the standard system function rand() > which returns numbers in the range 0 to RAND_MAX, what is the > correct method for arriving at numbers in the range 0 to N? For example, if ranno() were to return a number in the range 0..14 and x were 10, then (ranno() % x) would produce an element in [0..4] twice as often as an element in [5..9]. So, the distribution is not uniform. What you can do is compute (RAND_MAX % x) and if the raw value from ranno() is <= that value, toss it and ask for a new ranno(). - Carl -- Carl M. Ellison cme@sw.stratus.com RIPEM MD5OfPublicKey: 39D9860686A9F075A9A83D49589C677A Stratus Computer Inc. TEL: (508)460-2783 55 Fairbanks Boulevard ; Marlborough MA 01752-1298 FAX: (508)624-7488