aboutsummaryrefslogtreecommitdiff
path: root/math/s_cacoshf.c
diff options
context:
space:
mode:
authorRichard B. Kreckel <kreckel@ginac.de>2011-12-21 21:01:29 -0500
committerUlrich Drepper <drepper@gmail.com>2011-12-21 21:01:29 -0500
commitb27e24b8746b20d9ded426f202b79c3b7aeb953e (patch)
treecc534a882fbcf7498e22743335b3d2bcfd820cac /math/s_cacoshf.c
parent60e8585f2a2aa288a403a581f1dc8d3fc373598b (diff)
downloadglibc-b27e24b8746b20d9ded426f202b79c3b7aeb953e.zip
glibc-b27e24b8746b20d9ded426f202b79c3b7aeb953e.tar.gz
glibc-b27e24b8746b20d9ded426f202b79c3b7aeb953e.tar.bz2
Fix sign errr in some cacosh results
Diffstat (limited to 'math/s_cacoshf.c')
-rw-r--r--math/s_cacoshf.c22
1 files changed, 2 insertions, 20 deletions
diff --git a/math/s_cacoshf.c b/math/s_cacoshf.c
index 0d6bd75..aa4696f 100644
--- a/math/s_cacoshf.c
+++ b/math/s_cacoshf.c
@@ -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;