4-stable and C rand()?

Eric Timme timothy at voidnet.com
Mon Apr 7 07:01:20 PDT 2003


Hi everyone, sorry if this has been answered before - I caught a whiff of a
discussion about c's rand() function in a mailing list archive, but couldn't
find a definitive answer.

I'm trying to do a simple CS project on my machine where I generate two sets
of values in parallel using rand() and am running into infinite loops of
values, and couldn't figure out why, so I wrote a test program:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
        int a, b;
        srand((unsigned)time(0));

        for (int i=0 ; i < 50 ; i++)
                cout << rand() % 32 << "   " << rand() % 4 << endl;

        return 0;
}

No matter how many times I run this it seems to alternate between generating
two different but non-unique sets of values, depending on whether time(0) is
even or odd..and I can't understand why (values at the end of this message).

My uname -a is:
FreeBSD repose 4.8-RC FreeBSD 4.8-RC #0: Mon Mar 24 09:13:35 CST 2003
timothy at repose:/usr/obj/usr/src/sys/Repose  i386

It seems like the consensus on the thread I read was to use /dev/random or
/dev/urandom..but this isn't really an option for a CS project a TA has to
grade, so I've had to SSH out to finish the project.  I just want to know
what I'm doing wrong, and why I can't do this on my FreeBSD machine =\


The two value loops are:
22   1
4   3
2   1
16   3
14   1
28   3
26   1
8   3
6   1
20   3
18   1
0   3
30   1
12   3
10   1
24   3
22   1
4   3
2   1
16   3
14   1
28   3
26   1
8   3
6   1
20   3
18   1
0   3

and

19   2
9   0
15   2
5   0
11   2
1   0
7   2
29   0
3   2
25   0
31   2
21   0
27   2
17   0
23   2
13   0
19   2
9   0
15   2
5   0
11   2
1   0
7   2
29   0
3   2
25   0
31   2
21   0
27   2
17   0
23   2
13   0
19   2

Thanks for any insight you can lend.



More information about the freebsd-stable mailing list