1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

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> 2011-12-21 Ulrich Drepper <drepper@gmail.com>
[BZ #13439] [BZ #13439]

4
NEWS
View File

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

View File

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

View File

@ -1,5 +1,5 @@
/* Return arc hyperbole cosine for float value. /* 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -67,7 +67,6 @@ __cacoshf (__complex__ float x)
} }
else else
{ {
#if 1
__complex__ float y; __complex__ float y;
__real__ y = (__real__ x - __imag__ x) * (__real__ x + __imag__ x) - 1.0; __real__ y = (__real__ x - __imag__ x) * (__real__ x + __imag__ x) - 1.0;
@ -75,30 +74,13 @@ __cacoshf (__complex__ float x)
y = __csqrtf (y); y = __csqrtf (y);
if (__real__ x < 0.0) if (signbit (__real__ x))
y = -y; y = -y;
__real__ y += __real__ x; __real__ y += __real__ x;
__imag__ y += __imag__ x; __imag__ y += __imag__ x;
res = __clogf (y); 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; return res;

View File

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