random() error in Turbo C++
Niels J|rgen Kruse
njk at diku.dk
Sun Sep 9 06:15:20 AEST 1990
karl at haddock.ima.isc.com (Karl Heuer) writes:
> If it's important, here is a correct algorithm.
> #include <stdlib.h>
> int random(int n) {
> register int r;
> do r = rand() / ((RAND_MAX + 1UL) / n); while (r >= n);
> return (r);
> }
This require 2 divisions however. Here is an algorithm, that
only require one division:
#include <stdlib.h>
int random (int n) {
register int res, sor;
do {
res = (sor = rand()) % n;
sor = RAND_MAX - (sor - res);
} while (sor < n-1);
return res;
}
No conversions either, it's all plain integer arithmetic.
--
Niels J|rgen Kruse DIKU Graduate njk at diku.dk
More information about the Comp.lang.c
mailing list