From 889c1036890cf29f4afbdd2ce9475c9938fa366c Mon Sep 17 00:00:00 2001 From: nsz Date: Sun, 11 Mar 2012 15:42:55 +0100 Subject: [PATCH 1/1] fix csinhf --- src/cmath/csinhf.c | 45 +++++++++++++++------------------------------ 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/src/cmath/csinhf.c b/src/cmath/csinhf.c index 1754186..bbb116c 100644 --- a/src/cmath/csinhf.c +++ b/src/cmath/csinhf.c @@ -1,3 +1,4 @@ +/* origin: FreeBSD /usr/src/lib/msun/src/s_csinhf.c */ /*- * Copyright (c) 2005 Bruce D. Evans and Steven G. Kargl * All rights reserved. @@ -23,23 +24,15 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - /* * Hyperbolic sine of a complex argument z. See s_csinh.c for details. */ -#include -__FBSDID("$FreeBSD$"); - -#include -#include - -#include "math_private.h" +#include "libm.h" static const float huge = 0x1p127; -float complex -csinhf(float complex z) +float complex csinhf(float complex z) { float x, y, h; int32_t hx, hy, ix, iy; @@ -55,51 +48,43 @@ csinhf(float complex z) if (ix < 0x7f800000 && iy < 0x7f800000) { if (iy == 0) - return (cpackf(sinhf(x), y)); + return cpackf(sinhf(x), y); if (ix < 0x41100000) /* small x: normal case */ - return (cpackf(sinhf(x) * cosf(y), coshf(x) * sinf(y))); + return cpackf(sinhf(x) * cosf(y), coshf(x) * sinf(y)); /* |x| >= 9, so cosh(x) ~= exp(|x|) */ if (ix < 0x42b17218) { /* x < 88.7: expf(|x|) won't overflow */ h = expf(fabsf(x)) * 0.5f; - return (cpackf(copysignf(h, x) * cosf(y), h * sinf(y))); + return cpackf(copysignf(h, x) * cosf(y), h * sinf(y)); } else if (ix < 0x4340b1e7) { /* x < 192.7: scale to avoid overflow */ z = __ldexp_cexpf(cpackf(fabsf(x), y), -1); - return (cpackf(crealf(z) * copysignf(1, x), cimagf(z))); + return cpackf(crealf(z) * copysignf(1, x), cimagf(z)); } else { /* x >= 192.7: the result always overflows */ h = huge * x; - return (cpackf(h * cosf(y), h * h * sinf(y))); + return cpackf(h * cosf(y), h * h * sinf(y)); } } if (ix == 0 && iy >= 0x7f800000) - return (cpackf(copysignf(0, x * (y - y)), y - y)); + return cpackf(copysignf(0, x * (y - y)), y - y); if (iy == 0 && ix >= 0x7f800000) { if ((hx & 0x7fffff) == 0) - return (cpackf(x, y)); - return (cpackf(x, copysignf(0, y))); + return cpackf(x, y); + return cpackf(x, copysignf(0, y)); } if (ix < 0x7f800000 && iy >= 0x7f800000) - return (cpackf(y - y, x * (y - y))); + return cpackf(y - y, x * (y - y)); if (ix >= 0x7f800000 && (hx & 0x7fffff) == 0) { if (iy >= 0x7f800000) - return (cpackf(x * x, x * (y - y))); - return (cpackf(x * cosf(y), INFINITY * sinf(y))); + return cpackf(x * x, x * (y - y)); + return cpackf(x * cosf(y), INFINITY * sinf(y)); } - return (cpackf((x * x) * (y - y), (x + x) * (y - y))); -} - -float complex -csinf(float complex z) -{ - - z = csinhf(cpackf(-cimagf(z), crealf(z))); - return (cpackf(cimagf(z), -crealf(z))); + return cpackf((x * x) * (y - y), (x + x) * (y - y)); } -- 2.20.1