piet@cs.ruu.nl (Piet van Oostrum) (10/31/89)
I discovered a bug in the double precision floating point lib by Scott McCauley/John Dunning (dflonum.c). The routine to convert doubles to floating had a long where an unsigned long was required, thus causing a right shift to do a sign extend. This gives a few bit errors in some conversions. There was also a superfluous satement. Here is a patch: *** dflonum.c.~1~ Thu Jul 13 12:27:25 1989 --- dflonum.c Fri Oct 27 09:52:42 1989 *************** *** 636,642 **** double f; { struct bitdouble *bdp; ! int si, ex, mant1, mant2; bdp = &f; si = bdp->sign; ex = bdp->exp; --- 636,643 ---- double f; { struct bitdouble *bdp; ! int si, ex; ! unsigned long mant1, mant2; bdp = &f; si = bdp->sign; ex = bdp->exp; *************** *** 644,650 **** mant2 = bdp->mant2; /* zero value */ ! if (ex == 0) return(0L); /* less than 1 */ if (ex < 0x3ff) return(0L); /* less than 0 */ --- 645,651 ---- mant2 = bdp->mant2; /* zero value */ ! /* if (ex == 0) return(0L); */ /* this is covered in next line */ /* less than 1 */ if (ex < 0x3ff) return(0L); /* less than 0 */ -- Piet van Oostrum, Dept of Computer Science, University of Utrecht Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands. Telephone: +31-30-531806 Internet: piet@cs.ruu.nl Telefax: +31-30-513791 Uucp: uunet!mcsun!hp4nl!ruuinf!piet