mirror of
https://sourceware.org/git/glibc.git
synced 2024-09-21 17:04:05 +00:00
Fix e_logl (128ibm) spurious underflow
This commit is contained in:
parent
7a86be6e5f
commit
fbbe2b9a1f
@ -1,3 +1,10 @@
|
||||
2013-03-28 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||||
|
||||
[BZ #15214]
|
||||
* sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Fix spurious
|
||||
underflow.
|
||||
* sysdeps/powerpc/fpu/libm-test-ulps: Update.
|
||||
|
||||
2013-03-28 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||
|
||||
[BZ #15304]
|
||||
|
4
NEWS
4
NEWS
@ -11,8 +11,8 @@ Version 2.18
|
||||
|
||||
11120, 11561, 12723, 13550, 13889, 13951, 14142, 14176, 14200, 14317,
|
||||
14327, 14496, 14812, 14920, 14964, 14981, 14982, 14985, 14994, 14996,
|
||||
15003, 15006, 15020, 15023, 15036, 15054, 15055, 15062, 15078, 15160,
|
||||
15232, 15234, 15283, 15285, 15287, 15304, 15307.
|
||||
15003, 15006, 15020, 15023, 15036, 15054, 15055, 15062, 15078, 15124,
|
||||
15160, 15232, 15234, 15283, 15285, 15287, 15304, 15307.
|
||||
|
||||
* Add support for calling C++11 thread_local object destructors on thread
|
||||
and program exit. This needs compiler support for offloading C++11
|
||||
|
@ -182,6 +182,9 @@ static const long double
|
||||
ln2a = 6.93145751953125e-1L,
|
||||
ln2b = 1.4286068203094172321214581765680755001344E-6L;
|
||||
|
||||
static const long double
|
||||
ldbl_epsilon = 0x1p-106L;
|
||||
|
||||
long double
|
||||
__ieee754_logl(long double x)
|
||||
{
|
||||
@ -258,7 +261,12 @@ __ieee754_logl(long double x)
|
||||
}
|
||||
/* Series expansion of log(1+z). */
|
||||
w = z * z;
|
||||
y = ((((((((((((l15 * z
|
||||
/* Avoid spurious underflows. */
|
||||
if (__glibc_unlikely(w <= ldbl_epsilon))
|
||||
y = 0.0L;
|
||||
else
|
||||
{
|
||||
y = ((((((((((((l15 * z
|
||||
+ l14) * z
|
||||
+ l13) * z
|
||||
+ l12) * z
|
||||
@ -271,7 +279,8 @@ __ieee754_logl(long double x)
|
||||
+ l5) * z
|
||||
+ l4) * z
|
||||
+ l3) * z * w;
|
||||
y -= 0.5 * w;
|
||||
y -= 0.5 * w;
|
||||
}
|
||||
y += e * ln2b; /* Base 2 exponent offset times ln(2). */
|
||||
y += z;
|
||||
y += logtbl[k-26]; /* log(t) - (t-1) */
|
||||
|
@ -243,9 +243,11 @@ idouble: 1
|
||||
Test "Real part of: cacos (-0.5 + +0 i) == 2.094395102393195492308428922186335256131 - 0 i":
|
||||
double: 1
|
||||
idouble: 1
|
||||
ldouble: 1
|
||||
Test "Real part of: cacos (-0.5 - 0 i) == 2.094395102393195492308428922186335256131 + +0 i":
|
||||
double: 1
|
||||
idouble: 1
|
||||
ldouble: 1
|
||||
Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i":
|
||||
double: 1
|
||||
float: 1
|
||||
@ -265,6 +267,10 @@ double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 - 7.107906849659093345062145442726115449315e2 i":
|
||||
ldouble: 1
|
||||
Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 - 8.973081118419833726837456344608533993585e1 i":
|
||||
ldouble: 1
|
||||
|
||||
# cacosh
|
||||
Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
|
||||
|
Loading…
Reference in New Issue
Block a user