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