|
From: | Joseph Wakeling |
Subject: | [Help-gsl] Uniformly distributed int in [0,n-1] |
Date: | Sat, 17 Dec 2005 20:43:50 +0100 |
User-agent: | Mozilla Thunderbird 1.0.6 (X11/20050715) |
Hello all,As I mentioned in earlier emails I've been playing around a bit with the random number generators in the GSL.
I'm wondering if someone can advise on appropriate ways to generate uniformly-distributed ints in the range [0,n-1]. My traditional way has always been to take a function ranf() which returns a floating-point number in [0,1), and do,
x = (int) (n*ranf());But, if we suppose I have a function like the rand() function in C that returns an int between 0 and RAND_MAX - 1, would it be appropriate to do,
x = rand()%n; Or would this unduly affect the uniform distribution?I note that the gsl_rng_uniform_int function uses a method like this (simplifying slightly...;-):
do { x = rand()/(RAND_MAX/n); } while( x >= n);Could someone advise? If they are equivalent, what about the speed of these alternatives?
Many thanks, -- Joe
[Prev in Thread] | Current Thread | [Next in Thread] |