From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Jaeger To: "H.J. Lu" Cc: Zack Weinberg , egcs@cygnus.com, GNU C Library Subject: Re: A patch for libm-ieee754 Date: Sun, 22 Feb 1998 07:42:00 -0000 Message-id: References: X-SW-Source: 1998-02/msg01010.html >>>>> H J Lu writes: > Hi, > It turns out those libm-ieee754 bugs are not in egcs. Here is the patch > for glibc 2.1 to fix a few libm-ieee754 bugs. Ulrich, could you please > take a look? I've added all your math patches (and removed isless/islessequal i486 macros) and it's really an improvement (results for float and double are appended below)! The functions you've fixed (and those dependend on the correct results of e.g. exp) seem to be ok now (according to libm-test). scalb and gamma fail for some values. The other results are just rounding errors, we should change the epsilons in libm-test for those results. I'm appending a patch for BUGS (Uli, please add this to 2.1). Btw. none of those functions are in glibc 2.0.x - log2 and exp2 are new and exp has been rewritten recently. These are problems only in the development tree. Andreas 1998-02-22 Andreas Jaeger * BUGS: log2 and asin should be ok now, removed those entries and added entries for scalb and gamma. Index: BUGS =================================================================== RCS file: /egcs/carton/cvsfiles/libc/BUGS,v retrieving revision 1.20 diff -u -r1.20 BUGS --- BUGS 1998/02/20 15:03:12 1.20 +++ BUGS 1998/02/22 14:48:35 @@ -27,8 +27,6 @@ [ **] There are problems with signal handling when using LinuxThreads. -[ **] The libm-ieee `log2' function seems to be very inaccurate. - [ *] The precision of the `sinhl' and/or `asinhl' function do not seem to be the best. @@ -55,8 +53,12 @@ checked for errors, but the whole file containing the same category. [PR libc/207] + +[ *] The libm-ieee `gamma' function gives wrong results (at least for + -0.5). -[ *] The libm-ieee `asin' function gives wrong results (at least for 0.5). +[ *] The libm-ieee `scalb' function gives wrong results for + non-integral second parameters. [ *] _IO_getline can loop forever, at least with C++ [PR libc/332] =================================================================== Results of test-double and test-float: testing float (without inline functions) Fail: asin (0.7) == 0.775397496... Result: is: 7.75397598743438720703e-01 0x1.8d00ea00000000000000p-1 should be: 7.75397479534149169922e-01 0x1.8d00e600000000000000p-1 difference: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 Fail: asinh(0.7) == 0.652666566... Result: is: 6.52666509151458740234e-01 0x1.4e2a4e00000000000000p-1 should be: 6.52666568756103515625e-01 0x1.4e2a5000000000000000p-1 difference: 5.96046447753906250000e-08 0x1.00000000000000000000p-24 Fail: tanh (0.7) == 0.6043677771... Result: is: 6.04367733001708984375e-01 0x1.356fb000000000000000p-1 should be: 6.04367792606353759766e-01 0x1.356fb200000000000000p-1 difference: 5.96046447753906250000e-08 0x1.00000000000000000000p-24 Fail: scalb (2, 0.5) == NaN Value: 2.00000000000000000000e+00 0x1.00000000000000000000p+1 Fail: scalb (3, -2.5) == NaN Value: 7.50000000000000000000e-01 0x1.80000000000000000000p-1 Fail: gamma (-0.5) == -2*sqrt(pi): Exception "Invalid operation" set Fail: gamma (-0.5) == -2*sqrt(pi) Result: is: nan nan should be: -3.54490780830383300781e+00 -0x1.c5bf8a00000000000000p+1 difference: nan nan Fail: imag(ctanh(0.7 + i 1.2)) == -0.47786... Result: is: 4.77864027023315429688e-01 0x1.e9553000000000000000p-2 should be: 4.77864116430282592773e-01 0x1.e9553600000000000000p-2 difference: 8.94069671630859375000e-08 0x1.80000000000000000000p-24 Test suite completed: 2146 test cases plus 2134 tests for exception flags executed. 8 errors occured. testing double (without inline functions) Fail: scalb (2, 0.5) == NaN Value: 2.00000000000000000000e+00 0x1.00000000000000000000p+1 Fail: scalb (3, -2.5) == NaN Value: 7.50000000000000000000e-01 0x1.80000000000000000000p-1 Fail: gamma (-0.5) == -2*sqrt(pi): Exception "Invalid operation" set Fail: gamma (-0.5) == -2*sqrt(pi) Result: is: nan nan should be: -3.54490770181103176384e+00 -0x1.c5bf891b4ef6a0000000p+1 difference: nan nan Fail: real(cexp(0.7 + i 1.2)) == 0.72969... Result: is: 7.29698909150323760109e-01 0x1.759b186d747cf0000000p-1 should be: 7.29698909150323649087e-01 0x1.759b186d747ce0000000p-1 difference: 1.11022302462515654042e-16 0x1.00000000000000000000p-53 Fail: real(ctanh(0.7 + i 1.2)) == 1.34721... Result: is: 1.34721973990611898486e+00 0x1.58e364936c22e0000000p+0 should be: 1.34721973990611920691e+00 0x1.58e364936c22f0000000p+0 difference: 2.22044604925031308085e-16 0x1.00000000000000000000p-52 Test suite completed: 2031 test cases plus 2019 tests for exception flags executed. 6 errors occured. -- Andreas Jaeger aj@arthur.rhein-neckar.de jaeger@informatik.uni-kl.de for pgp-key finger ajaeger@alma.student.uni-kl.de