xref: /plan9/sys/src/cmd/unix/drawterm/libc/frand.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include	<u.h>
2*8ccd4a63SDavid du Colombier #include	<libc.h>
3*8ccd4a63SDavid du Colombier 
4*8ccd4a63SDavid du Colombier #define	MASK	0x7fffffffL
5*8ccd4a63SDavid du Colombier #define	NORM	(1.0/(1.0+MASK))
6*8ccd4a63SDavid du Colombier 
7*8ccd4a63SDavid du Colombier double
frand(void)8*8ccd4a63SDavid du Colombier frand(void)
9*8ccd4a63SDavid du Colombier {
10*8ccd4a63SDavid du Colombier 	double x;
11*8ccd4a63SDavid du Colombier 
12*8ccd4a63SDavid du Colombier 	do {
13*8ccd4a63SDavid du Colombier 		x = lrand() * NORM;
14*8ccd4a63SDavid du Colombier 		x = (x + lrand()) * NORM;
15*8ccd4a63SDavid du Colombier 	} while(x >= 1);
16*8ccd4a63SDavid du Colombier 	return x;
17*8ccd4a63SDavid du Colombier }
18