From owner-freebsd-hackers Wed Jan 18 10:32:43 1995 Return-Path: hackers-owner Received: (from root@localhost) by freefall.cdrom.com (8.6.9/8.6.6) id KAA11082 for hackers-outgoing; Wed, 18 Jan 1995 10:32:43 -0800 Received: from dg-rtp.dg.com (dg-rtp.rtp.dg.com [128.222.1.2]) by freefall.cdrom.com (8.6.9/8.6.6) with SMTP id KAA11072 for ; Wed, 18 Jan 1995 10:32:30 -0800 Received: by dg-rtp.dg.com (5.4R2.01/dg-rtp-v02) id AA09670; Wed, 18 Jan 1995 13:31:47 -0500 Received: (rivers@localhost) by ponds.UUCP (8.6.9/8.6.5) id MAA15855; Wed, 18 Jan 1995 12:06:23 -0500 Date: Wed, 18 Jan 1995 12:06:23 -0500 From: Thomas David Rivers Message-Id: <199501181706.MAA15855@ponds.UUCP> To: freebsd-bugs@freefall.cdrom.com, freebsd-hackers@freefall.cdrom.com Subject: Serious problems in drand48(). Sender: hackers-owner@FreeBSD.org Precedence: bulk I have run the following program on a Pentium and a 386sx-16 with no floating point co-processor. Both times it reported that drand48() incorrectly returned a value greater than 1.0. Of course, you're thinking - I haven't declared drand48() to return a double - but there it is... drand48() should never return a value >= 1.0. - Dave Rivers - ----------- cut here (test case) ---------- double d; #define COUNT 3072 double drand48(); main() { int i; for(i=0;i<(COUNT*2); i++) { d = drand48(); if( d > 1.0 ) { printf("d (%lf) is greater than 1.0\n", d); } } }