projects
/
libm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
405a21d
)
fix csinhf
author
nsz
<nsz@port70.net>
Sun, 11 Mar 2012 14:42:55 +0000
(15:42 +0100)
committer
nsz
<nsz@port70.net>
Sun, 11 Mar 2012 14:42:55 +0000
(15:42 +0100)
src/cmath/csinhf.c
patch
|
blob
|
history
diff --git
a/src/cmath/csinhf.c
b/src/cmath/csinhf.c
index
1754186
..
bbb116c
100644
(file)
--- 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.
/*-
* 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.
*/
* (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.
*/
/*
* 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;
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;
{
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)
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 */
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;
/* |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);
} 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;
} 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)
}
}
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)
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)
}
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)
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));
}
}