Date: Tue, 18 Feb 2003 16:04:57 -0800 (PST) From: Paul Herman <pherman@frenchfries.net> To: FreeBSD Hackers <hackers@freebsd.org> Subject: arc4random() range Message-ID: <20030218153651.A240-100000@mammoth.eat.frenchfries.net>
next in thread | raw e-mail | index | archive | help
Hi, ...a potential quick commit for someone. :-) What's the concesus that arc4random() should be a drop-in replacement for rand()/random()? Consider the following that caclulates the average of a bunch of random numbers on [0.0, 1.0]: bash$ cat rand.c #include <stdlib.h> int i; double avg; #define ITERATIONS 1000000 #define FIND_AVG(func) do { \ for (i=0, avg = 0.0; i<ITERATIONS; i++) \ avg += (double)func()/(double)RAND_MAX; \ printf("avg:\t%f\n", avg/ITERATIONS); \ } while (0) int main() { FIND_AVG(rand); FIND_AVG(random); FIND_AVG(arc4random); return 0; } bash$ cc rand.c && ./a.out avg: 0.500404 avg: 0.500007 avg: 1.001370 <--- !!!!!! bash$ uname -r 4.7-STABLE bash$ Is is just understood that arc4random() doesn't obey RAND_MAX, or should it? Whatever the answer is, perhaps the manpage should state what the range is like the manpages for rand(3) and random(3) do. -Paul. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030218153651.A240-100000>