diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | math/libm-test.inc | 3 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-96/s_tanhl.c | 2 |
4 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index 3a2ab448bf..e862a2c02b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2001-06-19 Andreas Jaeger <aj@suse.de> + + * sysdeps/ieee754/ldbl-128/s_tanhl.c: New file. + + * math/libm-test.inc (tanh_test): Test for 2^-56. + + * sysdeps/ieee754/ldbl-96/s_tanhl.c (__tanhl): Make sure result + equals argument when x < 2^-55. + Patches by Stephen L. Moshier <moshier@na-net.ornl.gov>. + 2001-06-17 Alan Modra <amodra@bigpond.net.au> * sysdeps/hppa/dl-machine.h (elf_machine_rela): handle relocs diff --git a/NEWS b/NEWS index 2c9046a9fc..38694a47fd 100644 --- a/NEWS +++ b/NEWS @@ -8,8 +8,8 @@ Please send GNU C library bug reports using the `glibcbug' script to Version 2.2.4 -* Stephen Moshier implemented cosh, expm1, log1p, acos, sinh for the - 128-bit long double format. +* Stephen Moshier implemented cosh, expm1, log1p, acos, sinh, tanh for + the 128-bit long double format. * Bruno Haible updated all the code handling Unicode in some form to support Unicode 3.1. diff --git a/math/libm-test.inc b/math/libm-test.inc index 481c395643..2c3a3f6ffa 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -3975,6 +3975,9 @@ tanh_test (void) TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L); TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L); + /* 2^-56 */ + TEST_f_f (tanh, 1.387778780781445675529539585113525390625e-17L, 1.387778780781445675529539585113525390625e-17L); + END (tanh); } diff --git a/sysdeps/ieee754/ldbl-96/s_tanhl.c b/sysdeps/ieee754/ldbl-96/s_tanhl.c index 5c0ac9a95d..45cea903e3 100644 --- a/sysdeps/ieee754/ldbl-96/s_tanhl.c +++ b/sysdeps/ieee754/ldbl-96/s_tanhl.c @@ -78,7 +78,7 @@ static long double one=1.0, two=2.0, tiny = 1.0e-4900L; if ((ix|j0|j1) == 0) return x; /* x == +- 0 */ if (ix<0x3fc8) /* |x|<2**-55 */ - return x*(one+x); /* tanh(small) = small */ + return x*(one+tiny); /* tanh(small) = small */ if (ix>=0x3fff) { /* |x|>=1 */ t = __expm1l(two*fabsl(x)); z = one - two/(t+two); |