Print this page
11210 libm should be cstyle(1ONBLD) clean
@@ -20,10 +20,11 @@
*/
/*
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
*/
+
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -33,26 +34,27 @@
#include "complex_wrapper.h"
extern int isinfl(long double);
extern int iszerol(long double);
-/* INDENT OFF */
static const long double zero = 0.0L;
-/* INDENT ON */
+
ldcomplex
-cexpl(ldcomplex z) {
+cexpl(ldcomplex z)
+{
ldcomplex ans;
long double x, y, t, c, s;
int n, ix, iy, hx, hy;
x = LD_RE(z);
y = LD_IM(z);
hx = HI_XWORD(x);
hy = HI_XWORD(y);
ix = hx & 0x7fffffff;
iy = hy & 0x7fffffff;
+
if (iszerol(y)) { /* y = 0 */
LD_RE(ans) = expl(x);
LD_IM(ans) = y;
} else if (isinfl(x)) { /* x is +-inf */
if (hx < 0) {
@@ -74,17 +76,19 @@
LD_IM(ans) = x * s;
}
}
} else {
(void) sincosl(y, &s, &c);
+
if (ix >= 0x400C62E4) { /* |x| > 11356.52... ~ log(2**16384) */
t = __k_cexpl(x, &n);
LD_RE(ans) = scalbnl(t * c, n);
LD_IM(ans) = scalbnl(t * s, n);
} else {
t = expl(x);
LD_RE(ans) = t * c;
LD_IM(ans) = t * s;
}
}
+
return (ans);
}