Fix sign errr in some cacosh results

This commit is contained in:
Richard B. Kreckel 2011-12-21 21:01:29 -05:00 committed by Ulrich Drepper
parent 60e8585f2a
commit b27e24b874
5 changed files with 13 additions and 32 deletions

View File

@ -1,3 +1,10 @@
2011-11-18 Richard B. Kreckel <kreckel@ginac.de>
[BZ #13305]
* math/s_cacosh.c: Fix rare miscomputation in cacosh().
* math/s_cacoshf.c: Likewise.
* math/s_cacoshl.c: Likewise.
2011-12-21 Ulrich Drepper <drepper@gmail.com>
[BZ #13439]

4
NEWS
View File

@ -12,8 +12,8 @@ Version 2.15
6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13192,
13268, 13276, 13291, 13335, 13337, 13344, 13358, 13367, 13439, 13446,
13472, 13484, 13506, 13515, 13524
13268, 13276, 13291, 13305, 13335, 13337, 13344, 13358, 13367, 13439,
13446, 13472, 13484, 13506, 13515, 13524
* New program pldd to list loaded object of a process
Implemented by Ulrich Drepper.

View File

@ -74,17 +74,13 @@ __cacosh (__complex__ double x)
y = __csqrt (y);
if (__real__ x < 0.0)
if (signbit (__real__ x))
y = -y;
__real__ y += __real__ x;
__imag__ y += __imag__ x;
res = __clog (y);
/* We have to use the positive branch. */
if (__real__ res < 0.0)
res = -res;
}
return res;

View File

@ -1,5 +1,5 @@
/* Return arc hyperbole cosine for float value.
Copyright (C) 1997, 2006 Free Software Foundation, Inc.
Copyright (C) 1997, 2006, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -67,7 +67,6 @@ __cacoshf (__complex__ float x)
}
else
{
#if 1
__complex__ float y;
__real__ y = (__real__ x - __imag__ x) * (__real__ x + __imag__ x) - 1.0;
@ -75,30 +74,13 @@ __cacoshf (__complex__ float x)
y = __csqrtf (y);
if (__real__ x < 0.0)
if (signbit (__real__ x))
y = -y;
__real__ y += __real__ x;
__imag__ y += __imag__ x;
res = __clogf (y);
#else
float re2 = __real__ x * __real__ x;
float im2 = __imag__ x * __imag__ x;
float sq = re2 - im2 - 1.0;
float ro = __ieee754_sqrtf (sq * sq + 4 * re2 * im2);
float a = __ieee754_sqrtf ((sq + ro) / 2.0);
float b = __ieee754_sqrtf ((-sq + ro) / 2.0);
__real__ res = 0.5 * __ieee754_logf (re2 + __real__ x * 2 * a
+ im2 + __imag__ x * 2 * b
+ ro);
__imag__ res = __ieee754_atan2f (__imag__ x + b, __real__ x + a);
#endif
/* We have to use the positive branch. */
if (__real__ res < 0.0)
res = -res;
}
return res;

View File

@ -74,17 +74,13 @@ __cacoshl (__complex__ long double x)
y = __csqrtl (y);
if (__real__ x < 0.0)
if (signbit (__real__ x))
y = -y;
__real__ y += __real__ x;
__imag__ y += __imag__ x;
res = __clogl (y);
/* We have to use the positive branch. */
if (__real__ res < 0.0)
res = -res;
}
return res;