fix csinhf
authornsz <nsz@port70.net>
Sun, 11 Mar 2012 14:42:55 +0000 (15:42 +0100)
committernsz <nsz@port70.net>
Sun, 11 Mar 2012 14:42:55 +0000 (15:42 +0100)
src/cmath/csinhf.c

index 1754186..bbb116c 100644 (file)
@@ -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.
  * (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 <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <complex.h>
-#include <math.h>
-
-#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));
 }