projects
/
musl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e2fe959
)
complex: add C11 CMPLX macros and replace cpack with them
author
Szabolcs Nagy
<nsz@port70.net>
Tue, 13 Nov 2012 00:31:49 +0000
(
01:31
+0100)
committer
Szabolcs Nagy
<nsz@port70.net>
Tue, 13 Nov 2012 00:31:49 +0000
(
01:31
+0100)
47 files changed:
include/complex.h
patch
|
blob
|
history
src/complex/__cexp.c
patch
|
blob
|
history
src/complex/__cexpf.c
patch
|
blob
|
history
src/complex/cacos.c
patch
|
blob
|
history
src/complex/cacosf.c
patch
|
blob
|
history
src/complex/cacosh.c
patch
|
blob
|
history
src/complex/cacoshf.c
patch
|
blob
|
history
src/complex/cacoshl.c
patch
|
blob
|
history
src/complex/cacosl.c
patch
|
blob
|
history
src/complex/casin.c
patch
|
blob
|
history
src/complex/casinf.c
patch
|
blob
|
history
src/complex/casinh.c
patch
|
blob
|
history
src/complex/casinhf.c
patch
|
blob
|
history
src/complex/casinhl.c
patch
|
blob
|
history
src/complex/casinl.c
patch
|
blob
|
history
src/complex/catanh.c
patch
|
blob
|
history
src/complex/catanhf.c
patch
|
blob
|
history
src/complex/catanhl.c
patch
|
blob
|
history
src/complex/ccos.c
patch
|
blob
|
history
src/complex/ccosf.c
patch
|
blob
|
history
src/complex/ccosh.c
patch
|
blob
|
history
src/complex/ccoshf.c
patch
|
blob
|
history
src/complex/ccosl.c
patch
|
blob
|
history
src/complex/cexp.c
patch
|
blob
|
history
src/complex/cexpf.c
patch
|
blob
|
history
src/complex/clog.c
patch
|
blob
|
history
src/complex/clogf.c
patch
|
blob
|
history
src/complex/clogl.c
patch
|
blob
|
history
src/complex/conj.c
patch
|
blob
|
history
src/complex/conjf.c
patch
|
blob
|
history
src/complex/conjl.c
patch
|
blob
|
history
src/complex/cproj.c
patch
|
blob
|
history
src/complex/cprojf.c
patch
|
blob
|
history
src/complex/cprojl.c
patch
|
blob
|
history
src/complex/csin.c
patch
|
blob
|
history
src/complex/csinf.c
patch
|
blob
|
history
src/complex/csinh.c
patch
|
blob
|
history
src/complex/csinhf.c
patch
|
blob
|
history
src/complex/csinl.c
patch
|
blob
|
history
src/complex/csqrt.c
patch
|
blob
|
history
src/complex/csqrtf.c
patch
|
blob
|
history
src/complex/ctan.c
patch
|
blob
|
history
src/complex/ctanf.c
patch
|
blob
|
history
src/complex/ctanh.c
patch
|
blob
|
history
src/complex/ctanhf.c
patch
|
blob
|
history
src/complex/ctanl.c
patch
|
blob
|
history
src/internal/libm.h
patch
|
blob
|
history
diff --git
a/include/complex.h
b/include/complex.h
index
b4bcb22
..
8206e02
100644
(file)
--- a/
include/complex.h
+++ b/
include/complex.h
@@
-112,6
+112,15
@@
long double creall(long double complex);
#define cimagf(x) __CIMAG(x, float)
#define cimagl(x) __CIMAG(x, long double)
#define cimagf(x) __CIMAG(x, float)
#define cimagl(x) __CIMAG(x, long double)
+#define __CMPLX(x, y, t) \
+ ((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)
+
+#if __STDC_VERSION__ >= 201112L
+#define CMPLX(x, y) __CMPLX(x, y, double)
+#define CMPLXF(x, y) __CMPLX(x, y, float)
+#define CMPLXL(x, y) __CMPLX(x, y, long double)
+#endif
+
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
}
#endif
diff --git
a/src/complex/__cexp.c
b/src/complex/__cexp.c
index
f603e2b
..
05ac28c
100644
(file)
--- a/
src/complex/__cexp.c
+++ b/
src/complex/__cexp.c
@@
-83,5
+83,5
@@
double complex __ldexp_cexp(double complex z, int expt)
half_expt = expt - half_expt;
INSERT_WORDS(scale2, (0x3ff + half_expt) << 20, 0);
half_expt = expt - half_expt;
INSERT_WORDS(scale2, (0x3ff + half_expt) << 20, 0);
- return
cpack
(cos(y) * exp_x * scale1 * scale2, sin(y) * exp_x * scale1 * scale2);
+ return
CMPLX
(cos(y) * exp_x * scale1 * scale2, sin(y) * exp_x * scale1 * scale2);
}
}
diff --git
a/src/complex/__cexpf.c
b/src/complex/__cexpf.c
index
47168e8
..
69b5404
100644
(file)
--- a/
src/complex/__cexpf.c
+++ b/
src/complex/__cexpf.c
@@
-63,6
+63,6
@@
float complex __ldexp_cexpf(float complex z, int expt)
half_expt = expt - half_expt;
SET_FLOAT_WORD(scale2, (0x7f + half_expt) << 23);
half_expt = expt - half_expt;
SET_FLOAT_WORD(scale2, (0x7f + half_expt) << 23);
- return
cpackf
(cosf(y) * exp_x * scale1 * scale2,
+ return
CMPLXF
(cosf(y) * exp_x * scale1 * scale2,
sinf(y) * exp_x * scale1 * scale2);
}
sinf(y) * exp_x * scale1 * scale2);
}
diff --git
a/src/complex/cacos.c
b/src/complex/cacos.c
index
3aca051
..
27c3563
100644
(file)
--- a/
src/complex/cacos.c
+++ b/
src/complex/cacos.c
@@
-7,5
+7,5
@@
double complex cacos(double complex z)
{
z = casin(z);
double complex cacos(double complex z)
{
z = casin(z);
- return
cpack
(M_PI_2 - creal(z), -cimag(z));
+ return
CMPLX
(M_PI_2 - creal(z), -cimag(z));
}
}
diff --git
a/src/complex/cacosf.c
b/src/complex/cacosf.c
index
563766e
..
1185265
100644
(file)
--- a/
src/complex/cacosf.c
+++ b/
src/complex/cacosf.c
@@
-5,5
+5,5
@@
float complex cacosf(float complex z)
{
z = casinf(z);
float complex cacosf(float complex z)
{
z = casinf(z);
- return
cpackf
((float)M_PI_2 - crealf(z), -cimagf(z));
+ return
CMPLXF
((float)M_PI_2 - crealf(z), -cimagf(z));
}
}
diff --git
a/src/complex/cacosh.c
b/src/complex/cacosh.c
index
c2dfc1b
..
8c68cb0
100644
(file)
--- a/
src/complex/cacosh.c
+++ b/
src/complex/cacosh.c
@@
-5,5
+5,5
@@
double complex cacosh(double complex z)
{
z = cacos(z);
double complex cacosh(double complex z)
{
z = cacos(z);
- return
cpack
(-cimag(z), creal(z));
+ return
CMPLX
(-cimag(z), creal(z));
}
}
diff --git
a/src/complex/cacoshf.c
b/src/complex/cacoshf.c
index
37ff880
..
ade01c0
100644
(file)
--- a/
src/complex/cacoshf.c
+++ b/
src/complex/cacoshf.c
@@
-3,5
+3,5
@@
float complex cacoshf(float complex z)
{
z = cacosf(z);
float complex cacoshf(float complex z)
{
z = cacosf(z);
- return
cpackf
(-cimagf(z), crealf(z));
+ return
CMPLXF
(-cimagf(z), crealf(z));
}
}
diff --git
a/src/complex/cacoshl.c
b/src/complex/cacoshl.c
index
2a04e27
..
6534255
100644
(file)
--- a/
src/complex/cacoshl.c
+++ b/
src/complex/cacoshl.c
@@
-9,6
+9,6
@@
long double complex cacoshl(long double complex z)
long double complex cacoshl(long double complex z)
{
z = cacosl(z);
long double complex cacoshl(long double complex z)
{
z = cacosl(z);
- return
cpackl
(-cimagl(z), creall(z));
+ return
CMPLXL
(-cimagl(z), creall(z));
}
#endif
}
#endif
diff --git
a/src/complex/cacosl.c
b/src/complex/cacosl.c
index
5992e05
..
7fd4a2f
100644
(file)
--- a/
src/complex/cacosl.c
+++ b/
src/complex/cacosl.c
@@
-11,6
+11,6
@@
long double complex cacosl(long double complex z)
long double complex cacosl(long double complex z)
{
z = casinl(z);
long double complex cacosl(long double complex z)
{
z = casinl(z);
- return
cpackl
(PI_2 - creall(z), -cimagl(z));
+ return
CMPLXL
(PI_2 - creall(z), -cimagl(z));
}
#endif
}
#endif
diff --git
a/src/complex/casin.c
b/src/complex/casin.c
index
79aff27
..
dfdda98
100644
(file)
--- a/
src/complex/casin.c
+++ b/
src/complex/casin.c
@@
-11,6
+11,6
@@
double complex casin(double complex z)
x = creal(z);
y = cimag(z);
x = creal(z);
y = cimag(z);
- w =
cpack
(1.0 - (x - y)*(x + y), -2.0*x*y);
- return clog(
cpack
(-y, x) + csqrt(w));
+ w =
CMPLX
(1.0 - (x - y)*(x + y), -2.0*x*y);
+ return clog(
CMPLX
(-y, x) + csqrt(w));
}
}
diff --git
a/src/complex/casinf.c
b/src/complex/casinf.c
index
cb9863f
..
93f0e33
100644
(file)
--- a/
src/complex/casinf.c
+++ b/
src/complex/casinf.c
@@
-9,6
+9,6
@@
float complex casinf(float complex z)
x = crealf(z);
y = cimagf(z);
x = crealf(z);
y = cimagf(z);
- w =
cpackf
(1.0 - (x - y)*(x + y), -2.0*x*y);
- return clogf(
cpackf
(-y, x) + csqrtf(w));
+ w =
CMPLXF
(1.0 - (x - y)*(x + y), -2.0*x*y);
+ return clogf(
CMPLXF
(-y, x) + csqrtf(w));
}
}
diff --git
a/src/complex/casinh.c
b/src/complex/casinh.c
index
f2b3fef
..
b57fe8c
100644
(file)
--- a/
src/complex/casinh.c
+++ b/
src/complex/casinh.c
@@
-4,6
+4,6
@@
double complex casinh(double complex z)
{
double complex casinh(double complex z)
{
- z = casin(
cpack
(-cimag(z), creal(z)));
- return
cpack
(cimag(z), -creal(z));
+ z = casin(
CMPLX
(-cimag(z), creal(z)));
+ return
CMPLX
(cimag(z), -creal(z));
}
}
diff --git
a/src/complex/casinhf.c
b/src/complex/casinhf.c
index
ed4af64
..
a11bf90
100644
(file)
--- a/
src/complex/casinhf.c
+++ b/
src/complex/casinhf.c
@@
-2,6
+2,6
@@
float complex casinhf(float complex z)
{
float complex casinhf(float complex z)
{
- z = casinf(
cpackf
(-cimagf(z), crealf(z)));
- return
cpackf
(cimagf(z), -crealf(z));
+ z = casinf(
CMPLXF
(-cimagf(z), crealf(z)));
+ return
CMPLXF
(cimagf(z), -crealf(z));
}
}
diff --git
a/src/complex/casinhl.c
b/src/complex/casinhl.c
index
e5d80ce
..
714f189
100644
(file)
--- a/
src/complex/casinhl.c
+++ b/
src/complex/casinhl.c
@@
-8,7
+8,7
@@
long double complex casinhl(long double complex z)
#else
long double complex casinhl(long double complex z)
{
#else
long double complex casinhl(long double complex z)
{
- z = casinl(
cpackl
(-cimagl(z), creall(z)));
- return
cpackl
(cimagl(z), -creall(z));
+ z = casinl(
CMPLXL
(-cimagl(z), creall(z)));
+ return
CMPLXL
(cimagl(z), -creall(z));
}
#endif
}
#endif
diff --git
a/src/complex/casinl.c
b/src/complex/casinl.c
index
f9aa8de
..
0916c60
100644
(file)
--- a/
src/complex/casinl.c
+++ b/
src/complex/casinl.c
@@
-14,7
+14,7
@@
long double complex casinl(long double complex z)
x = creall(z);
y = cimagl(z);
x = creall(z);
y = cimagl(z);
- w =
cpackl
(1.0 - (x - y)*(x + y), -2.0*x*y);
- return clogl(
cpackl
(-y, x) + csqrtl(w));
+ w =
CMPLXL
(1.0 - (x - y)*(x + y), -2.0*x*y);
+ return clogl(
CMPLXL
(-y, x) + csqrtl(w));
}
#endif
}
#endif
diff --git
a/src/complex/catanh.c
b/src/complex/catanh.c
index
b162802
..
e248d9b
100644
(file)
--- a/
src/complex/catanh.c
+++ b/
src/complex/catanh.c
@@
-4,6
+4,6
@@
double complex catanh(double complex z)
{
double complex catanh(double complex z)
{
- z = catan(
cpack
(-cimag(z), creal(z)));
- return
cpack
(cimag(z), -creal(z));
+ z = catan(
CMPLX
(-cimag(z), creal(z)));
+ return
CMPLX
(cimag(z), -creal(z));
}
}
diff --git
a/src/complex/catanhf.c
b/src/complex/catanhf.c
index
e1d1e64
..
4a5eb04
100644
(file)
--- a/
src/complex/catanhf.c
+++ b/
src/complex/catanhf.c
@@
-2,6
+2,6
@@
float complex catanhf(float complex z)
{
float complex catanhf(float complex z)
{
- z = catanf(
cpackf
(-cimagf(z), crealf(z)));
- return
cpackf
(cimagf(z), -crealf(z));
+ z = catanf(
CMPLXF
(-cimagf(z), crealf(z)));
+ return
CMPLXF
(cimagf(z), -crealf(z));
}
}
diff --git
a/src/complex/catanhl.c
b/src/complex/catanhl.c
index
0a9374a
..
a5dd538
100644
(file)
--- a/
src/complex/catanhl.c
+++ b/
src/complex/catanhl.c
@@
-8,7
+8,7
@@
long double complex catanhl(long double complex z)
#else
long double complex catanhl(long double complex z)
{
#else
long double complex catanhl(long double complex z)
{
- z = catanl(
cpackl
(-cimagl(z), creall(z)));
- return
cpackl
(cimagl(z), -creall(z));
+ z = catanl(
CMPLXL
(-cimagl(z), creall(z)));
+ return
CMPLXL
(cimagl(z), -creall(z));
}
#endif
}
#endif
diff --git
a/src/complex/ccos.c
b/src/complex/ccos.c
index
5754c23
..
645aec2
100644
(file)
--- a/
src/complex/ccos.c
+++ b/
src/complex/ccos.c
@@
-4,5
+4,5
@@
double complex ccos(double complex z)
{
double complex ccos(double complex z)
{
- return ccosh(
cpack
(-cimag(z), creal(z)));
+ return ccosh(
CMPLX
(-cimag(z), creal(z)));
}
}
diff --git
a/src/complex/ccosf.c
b/src/complex/ccosf.c
index
9b72c4f
..
9a67241
100644
(file)
--- a/
src/complex/ccosf.c
+++ b/
src/complex/ccosf.c
@@
-2,5
+2,5
@@
float complex ccosf(float complex z)
{
float complex ccosf(float complex z)
{
- return ccoshf(
cpackf
(-cimagf(z), crealf(z)));
+ return ccoshf(
CMPLXF
(-cimagf(z), crealf(z)));
}
}
diff --git
a/src/complex/ccosh.c
b/src/complex/ccosh.c
index
81f2943
..
401f3c6
100644
(file)
--- a/
src/complex/ccosh.c
+++ b/
src/complex/ccosh.c
@@
-55,23
+55,23
@@
double complex ccosh(double complex z)
/* Handle the nearly-non-exceptional cases where x and y are finite. */
if (ix < 0x7ff00000 && iy < 0x7ff00000) {
if ((iy | ly) == 0)
/* Handle the nearly-non-exceptional cases where x and y are finite. */
if (ix < 0x7ff00000 && iy < 0x7ff00000) {
if ((iy | ly) == 0)
- return
cpack
(cosh(x), x * y);
+ return
CMPLX
(cosh(x), x * y);
if (ix < 0x40360000) /* small x: normal case */
if (ix < 0x40360000) /* small x: normal case */
- return
cpack
(cosh(x) * cos(y), sinh(x) * sin(y));
+ return
CMPLX
(cosh(x) * cos(y), sinh(x) * sin(y));
/* |x| >= 22, so cosh(x) ~= exp(|x|) */
if (ix < 0x40862e42) {
/* x < 710: exp(|x|) won't overflow */
h = exp(fabs(x)) * 0.5;
/* |x| >= 22, so cosh(x) ~= exp(|x|) */
if (ix < 0x40862e42) {
/* x < 710: exp(|x|) won't overflow */
h = exp(fabs(x)) * 0.5;
- return
cpack
(h * cos(y), copysign(h, x) * sin(y));
+ return
CMPLX
(h * cos(y), copysign(h, x) * sin(y));
} else if (ix < 0x4096bbaa) {
/* x < 1455: scale to avoid overflow */
} else if (ix < 0x4096bbaa) {
/* x < 1455: scale to avoid overflow */
- z = __ldexp_cexp(
cpack
(fabs(x), y), -1);
- return
cpack
(creal(z), cimag(z) * copysign(1, x));
+ z = __ldexp_cexp(
CMPLX
(fabs(x), y), -1);
+ return
CMPLX
(creal(z), cimag(z) * copysign(1, x));
} else {
/* x >= 1455: the result always overflows */
h = huge * x;
} else {
/* x >= 1455: the result always overflows */
h = huge * x;
- return
cpack
(h * h * cos(y), h * sin(y));
+ return
CMPLX
(h * h * cos(y), h * sin(y));
}
}
}
}
@@
-85,7
+85,7
@@
double complex ccosh(double complex z)
* the same as d(NaN).
*/
if ((ix | lx) == 0 && iy >= 0x7ff00000)
* the same as d(NaN).
*/
if ((ix | lx) == 0 && iy >= 0x7ff00000)
- return
cpack
(y - y, copysign(0, x * (y - y)));
+ return
CMPLX
(y - y, copysign(0, x * (y - y)));
/*
* cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0.
/*
* cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0.
@@
-95,8
+95,8
@@
double complex ccosh(double complex z)
*/
if ((iy | ly) == 0 && ix >= 0x7ff00000) {
if (((hx & 0xfffff) | lx) == 0)
*/
if ((iy | ly) == 0 && ix >= 0x7ff00000) {
if (((hx & 0xfffff) | lx) == 0)
- return
cpack
(x * x, copysign(0, x) * y);
- return
cpack
(x * x, copysign(0, (x + x) * y));
+ return
CMPLX
(x * x, copysign(0, x) * y);
+ return
CMPLX
(x * x, copysign(0, (x + x) * y));
}
/*
}
/*
@@
-108,7
+108,7
@@
double complex ccosh(double complex z)
* nonzero x. Choice = don't raise (except for signaling NaNs).
*/
if (ix < 0x7ff00000 && iy >= 0x7ff00000)
* nonzero x. Choice = don't raise (except for signaling NaNs).
*/
if (ix < 0x7ff00000 && iy >= 0x7ff00000)
- return
cpack
(y - y, x * (y - y));
+ return
CMPLX
(y - y, x * (y - y));
/*
* cosh(+-Inf + I NaN) = +Inf + I d(NaN).
/*
* cosh(+-Inf + I NaN) = +Inf + I d(NaN).
@@
-121,8
+121,8
@@
double complex ccosh(double complex z)
*/
if (ix >= 0x7ff00000 && ((hx & 0xfffff) | lx) == 0) {
if (iy >= 0x7ff00000)
*/
if (ix >= 0x7ff00000 && ((hx & 0xfffff) | lx) == 0) {
if (iy >= 0x7ff00000)
- return
cpack
(x * x, x * (y - y));
- return
cpack
((x * x) * cos(y), x * sin(y));
+ return
CMPLX
(x * x, x * (y - y));
+ return
CMPLX
((x * x) * cos(y), x * sin(y));
}
/*
}
/*
@@
-136,5
+136,5
@@
double complex ccosh(double complex z)
* Optionally raises the invalid floating-point exception for finite
* nonzero y. Choice = don't raise (except for signaling NaNs).
*/
* Optionally raises the invalid floating-point exception for finite
* nonzero y. Choice = don't raise (except for signaling NaNs).
*/
- return
cpack
((x * x) * (y - y), (x + x) * (y - y));
+ return
CMPLX
((x * x) * (y - y), (x + x) * (y - y));
}
}
diff --git
a/src/complex/ccoshf.c
b/src/complex/ccoshf.c
index
683e77f
..
90acfe0
100644
(file)
--- a/
src/complex/ccoshf.c
+++ b/
src/complex/ccoshf.c
@@
-48,43
+48,43
@@
float complex ccoshf(float complex z)
if (ix < 0x7f800000 && iy < 0x7f800000) {
if (iy == 0)
if (ix < 0x7f800000 && iy < 0x7f800000) {
if (iy == 0)
- return
cpackf
(coshf(x), x * y);
+ return
CMPLXF
(coshf(x), x * y);
if (ix < 0x41100000) /* small x: normal case */
if (ix < 0x41100000) /* small x: normal case */
- return
cpackf
(coshf(x) * cosf(y), sinhf(x) * sinf(y));
+ return
CMPLXF
(coshf(x) * cosf(y), sinhf(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
(h * cosf(y), copysignf(h, x) * sinf(y));
+ return
CMPLXF
(h * cosf(y), copysignf(h, x) * sinf(y));
} else if (ix < 0x4340b1e7) {
/* x < 192.7: scale to avoid overflow */
} else if (ix < 0x4340b1e7) {
/* x < 192.7: scale to avoid overflow */
- z = __ldexp_cexpf(
cpackf
(fabsf(x), y), -1);
- return
cpackf
(crealf(z), cimagf(z) * copysignf(1, x));
+ z = __ldexp_cexpf(
CMPLXF
(fabsf(x), y), -1);
+ return
CMPLXF
(crealf(z), cimagf(z) * copysignf(1, x));
} 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 * h * cosf(y), h * sinf(y));
+ return
CMPLXF
(h * h * cosf(y), h * sinf(y));
}
}
if (ix == 0 && iy >= 0x7f800000)
}
}
if (ix == 0 && iy >= 0x7f800000)
- return
cpackf
(y - y, copysignf(0, x * (y - y)));
+ return
CMPLXF
(y - y, copysignf(0, x * (y - y)));
if (iy == 0 && ix >= 0x7f800000) {
if ((hx & 0x7fffff) == 0)
if (iy == 0 && ix >= 0x7f800000) {
if ((hx & 0x7fffff) == 0)
- return
cpackf
(x * x, copysignf(0, x) * y);
- return
cpackf
(x * x, copysignf(0, (x + x) * y));
+ return
CMPLXF
(x * x, copysignf(0, x) * y);
+ return
CMPLXF
(x * x, copysignf(0, (x + x) * y));
}
if (ix < 0x7f800000 && iy >= 0x7f800000)
}
if (ix < 0x7f800000 && iy >= 0x7f800000)
- return
cpackf
(y - y, x * (y - y));
+ return
CMPLXF
(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 * x) * cosf(y), x * sinf(y));
+ return
CMPLXF
(x * x, x * (y - y));
+ return
CMPLXF
((x * x) * cosf(y), x * sinf(y));
}
}
- return
cpackf
((x * x) * (y - y), (x + x) * (y - y));
+ return
CMPLXF
((x * x) * (y - y), (x + x) * (y - y));
}
}
diff --git
a/src/complex/ccosl.c
b/src/complex/ccosl.c
index
e37825a
..
d787047
100644
(file)
--- a/
src/complex/ccosl.c
+++ b/
src/complex/ccosl.c
@@
-8,6
+8,6
@@
long double complex ccosl(long double complex z)
#else
long double complex ccosl(long double complex z)
{
#else
long double complex ccosl(long double complex z)
{
- return ccoshl(
cpackl
(-cimagl(z), creall(z)));
+ return ccoshl(
CMPLXL
(-cimagl(z), creall(z)));
}
#endif
}
#endif
diff --git
a/src/complex/cexp.c
b/src/complex/cexp.c
index
3b8bb75
..
5118e00
100644
(file)
--- a/
src/complex/cexp.c
+++ b/
src/complex/cexp.c
@@
-44,22
+44,22
@@
double complex cexp(double complex z)
/* cexp(x + I 0) = exp(x) + I 0 */
if ((hy | ly) == 0)
/* cexp(x + I 0) = exp(x) + I 0 */
if ((hy | ly) == 0)
- return
cpack
(exp(x), y);
+ return
CMPLX
(exp(x), y);
EXTRACT_WORDS(hx, lx, x);
/* cexp(0 + I y) = cos(y) + I sin(y) */
if (((hx & 0x7fffffff) | lx) == 0)
EXTRACT_WORDS(hx, lx, x);
/* cexp(0 + I y) = cos(y) + I sin(y) */
if (((hx & 0x7fffffff) | lx) == 0)
- return
cpack
(cos(y), sin(y));
+ return
CMPLX
(cos(y), sin(y));
if (hy >= 0x7ff00000) {
if (lx != 0 || (hx & 0x7fffffff) != 0x7ff00000) {
/* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */
if (hy >= 0x7ff00000) {
if (lx != 0 || (hx & 0x7fffffff) != 0x7ff00000) {
/* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */
- return
cpack
(y - y, y - y);
+ return
CMPLX
(y - y, y - y);
} else if (hx & 0x80000000) {
/* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */
} else if (hx & 0x80000000) {
/* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */
- return
cpack
(0.0, 0.0);
+ return
CMPLX
(0.0, 0.0);
} else {
/* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */
} else {
/* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */
- return
cpack
(x, y - y);
+ return
CMPLX
(x, y - y);
}
}
}
}
@@
-78,6
+78,6
@@
double complex cexp(double complex z)
* - x = NaN (spurious inexact exception from y)
*/
exp_x = exp(x);
* - x = NaN (spurious inexact exception from y)
*/
exp_x = exp(x);
- return
cpack
(exp_x * cos(y), exp_x * sin(y));
+ return
CMPLX
(exp_x * cos(y), exp_x * sin(y));
}
}
}
}
diff --git
a/src/complex/cexpf.c
b/src/complex/cexpf.c
index
0cf13a3
..
1a09964
100644
(file)
--- a/
src/complex/cexpf.c
+++ b/
src/complex/cexpf.c
@@
-44,22
+44,22
@@
float complex cexpf(float complex z)
/* cexp(x + I 0) = exp(x) + I 0 */
if (hy == 0)
/* cexp(x + I 0) = exp(x) + I 0 */
if (hy == 0)
- return
cpackf
(expf(x), y);
+ return
CMPLXF
(expf(x), y);
GET_FLOAT_WORD(hx, x);
/* cexp(0 + I y) = cos(y) + I sin(y) */
if ((hx & 0x7fffffff) == 0)
GET_FLOAT_WORD(hx, x);
/* cexp(0 + I y) = cos(y) + I sin(y) */
if ((hx & 0x7fffffff) == 0)
- return
cpackf
(cosf(y), sinf(y));
+ return
CMPLXF
(cosf(y), sinf(y));
if (hy >= 0x7f800000) {
if ((hx & 0x7fffffff) != 0x7f800000) {
/* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */
if (hy >= 0x7f800000) {
if ((hx & 0x7fffffff) != 0x7f800000) {
/* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */
- return
cpackf
(y - y, y - y);
+ return
CMPLXF
(y - y, y - y);
} else if (hx & 0x80000000) {
/* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */
} else if (hx & 0x80000000) {
/* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */
- return
cpackf
(0.0, 0.0);
+ return
CMPLXF
(0.0, 0.0);
} else {
/* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */
} else {
/* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */
- return
cpackf
(x, y - y);
+ return
CMPLXF
(x, y - y);
}
}
}
}
@@
-78,6
+78,6
@@
float complex cexpf(float complex z)
* - x = NaN (spurious inexact exception from y)
*/
exp_x = expf(x);
* - x = NaN (spurious inexact exception from y)
*/
exp_x = expf(x);
- return
cpackf
(exp_x * cosf(y), exp_x * sinf(y));
+ return
CMPLXF
(exp_x * cosf(y), exp_x * sinf(y));
}
}
}
}
diff --git
a/src/complex/clog.c
b/src/complex/clog.c
index
6f10a11
..
12aae9c
100644
(file)
--- a/
src/complex/clog.c
+++ b/
src/complex/clog.c
@@
-10,5
+10,5
@@
double complex clog(double complex z)
r = cabs(z);
phi = carg(z);
r = cabs(z);
phi = carg(z);
- return
cpack
(log(r), phi);
+ return
CMPLX
(log(r), phi);
}
}
diff --git
a/src/complex/clogf.c
b/src/complex/clogf.c
index
f3aec54
..
e9b32e6
100644
(file)
--- a/
src/complex/clogf.c
+++ b/
src/complex/clogf.c
@@
-8,5
+8,5
@@
float complex clogf(float complex z)
r = cabsf(z);
phi = cargf(z);
r = cabsf(z);
phi = cargf(z);
- return
cpackf
(logf(r), phi);
+ return
CMPLXF
(logf(r), phi);
}
}
diff --git
a/src/complex/clogl.c
b/src/complex/clogl.c
index
5b84ba5
..
18f1608
100644
(file)
--- a/
src/complex/clogl.c
+++ b/
src/complex/clogl.c
@@
-13,6
+13,6
@@
long double complex clogl(long double complex z)
r = cabsl(z);
phi = cargl(z);
r = cabsl(z);
phi = cargl(z);
- return
cpackl
(logl(r), phi);
+ return
CMPLXL
(logl(r), phi);
}
#endif
}
#endif
diff --git
a/src/complex/conj.c
b/src/complex/conj.c
index
4aceea7
..
0b3f5f4
100644
(file)
--- a/
src/complex/conj.c
+++ b/
src/complex/conj.c
@@
-2,5
+2,5
@@
double complex conj(double complex z)
{
double complex conj(double complex z)
{
- return
cpack
(creal(z), -cimag(z));
+ return
CMPLX
(creal(z), -cimag(z));
}
}
diff --git
a/src/complex/conjf.c
b/src/complex/conjf.c
index
3155680
..
9af6b2c
100644
(file)
--- a/
src/complex/conjf.c
+++ b/
src/complex/conjf.c
@@
-2,5
+2,5
@@
float complex conjf(float complex z)
{
float complex conjf(float complex z)
{
- return
cpackf
(crealf(z), -cimagf(z));
+ return
CMPLXF
(crealf(z), -cimagf(z));
}
}
diff --git
a/src/complex/conjl.c
b/src/complex/conjl.c
index
0133226
..
67f11b9
100644
(file)
--- a/
src/complex/conjl.c
+++ b/
src/complex/conjl.c
@@
-2,5
+2,5
@@
long double complex conjl(long double complex z)
{
long double complex conjl(long double complex z)
{
- return
cpackl
(creall(z), -cimagl(z));
+ return
CMPLXL
(creall(z), -cimagl(z));
}
}
diff --git
a/src/complex/cproj.c
b/src/complex/cproj.c
index
1cf9bb9
..
15f358a
100644
(file)
--- a/
src/complex/cproj.c
+++ b/
src/complex/cproj.c
@@
-3,6
+3,6
@@
double complex cproj(double complex z)
{
if (isinf(creal(z)) || isinf(cimag(z)))
double complex cproj(double complex z)
{
if (isinf(creal(z)) || isinf(cimag(z)))
- return
cpack
(INFINITY, copysign(0.0, creal(z)));
+ return
CMPLX
(INFINITY, copysign(0.0, creal(z)));
return z;
}
return z;
}
diff --git
a/src/complex/cprojf.c
b/src/complex/cprojf.c
index
7112974
..
653be5e
100644
(file)
--- a/
src/complex/cprojf.c
+++ b/
src/complex/cprojf.c
@@
-3,6
+3,6
@@
float complex cprojf(float complex z)
{
if (isinf(crealf(z)) || isinf(cimagf(z)))
float complex cprojf(float complex z)
{
if (isinf(crealf(z)) || isinf(cimagf(z)))
- return
cpackf
(INFINITY, copysignf(0.0, crealf(z)));
+ return
CMPLXF
(INFINITY, copysignf(0.0, crealf(z)));
return z;
}
return z;
}
diff --git
a/src/complex/cprojl.c
b/src/complex/cprojl.c
index
72e50cf
..
6731aaa
100644
(file)
--- a/
src/complex/cprojl.c
+++ b/
src/complex/cprojl.c
@@
-9,7
+9,7
@@
long double complex cprojl(long double complex z)
long double complex cprojl(long double complex z)
{
if (isinf(creall(z)) || isinf(cimagl(z)))
long double complex cprojl(long double complex z)
{
if (isinf(creall(z)) || isinf(cimagl(z)))
- return
cpackl
(INFINITY, copysignl(0.0, creall(z)));
+ return
CMPLXL
(INFINITY, copysignl(0.0, creall(z)));
return z;
}
#endif
return z;
}
#endif
diff --git
a/src/complex/csin.c
b/src/complex/csin.c
index
246a459
..
ad8ae67
100644
(file)
--- a/
src/complex/csin.c
+++ b/
src/complex/csin.c
@@
-4,6
+4,6
@@
double complex csin(double complex z)
{
double complex csin(double complex z)
{
- z = csinh(
cpack
(-cimag(z), creal(z)));
- return
cpack
(cimag(z), -creal(z));
+ z = csinh(
CMPLX
(-cimag(z), creal(z)));
+ return
CMPLX
(cimag(z), -creal(z));
}
}
diff --git
a/src/complex/csinf.c
b/src/complex/csinf.c
index
3aabe8f
..
60b3cba
100644
(file)
--- a/
src/complex/csinf.c
+++ b/
src/complex/csinf.c
@@
-2,6
+2,6
@@
float complex csinf(float complex z)
{
float complex csinf(float complex z)
{
- z = csinhf(
cpackf
(-cimagf(z), crealf(z)));
- return
cpackf
(cimagf(z), -crealf(z));
+ z = csinhf(
CMPLXF
(-cimagf(z), crealf(z)));
+ return
CMPLXF
(cimagf(z), -crealf(z));
}
}
diff --git
a/src/complex/csinh.c
b/src/complex/csinh.c
index
fe16f06
..
0f8035d
100644
(file)
--- a/
src/complex/csinh.c
+++ b/
src/complex/csinh.c
@@
-55,23
+55,23
@@
double complex csinh(double complex z)
/* Handle the nearly-non-exceptional cases where x and y are finite. */
if (ix < 0x7ff00000 && iy < 0x7ff00000) {
if ((iy | ly) == 0)
/* Handle the nearly-non-exceptional cases where x and y are finite. */
if (ix < 0x7ff00000 && iy < 0x7ff00000) {
if ((iy | ly) == 0)
- return
cpack
(sinh(x), y);
+ return
CMPLX
(sinh(x), y);
if (ix < 0x40360000) /* small x: normal case */
if (ix < 0x40360000) /* small x: normal case */
- return
cpack
(sinh(x) * cos(y), cosh(x) * sin(y));
+ return
CMPLX
(sinh(x) * cos(y), cosh(x) * sin(y));
/* |x| >= 22, so cosh(x) ~= exp(|x|) */
if (ix < 0x40862e42) {
/* x < 710: exp(|x|) won't overflow */
h = exp(fabs(x)) * 0.5;
/* |x| >= 22, so cosh(x) ~= exp(|x|) */
if (ix < 0x40862e42) {
/* x < 710: exp(|x|) won't overflow */
h = exp(fabs(x)) * 0.5;
- return
cpack
(copysign(h, x) * cos(y), h * sin(y));
+ return
CMPLX
(copysign(h, x) * cos(y), h * sin(y));
} else if (ix < 0x4096bbaa) {
/* x < 1455: scale to avoid overflow */
} else if (ix < 0x4096bbaa) {
/* x < 1455: scale to avoid overflow */
- z = __ldexp_cexp(
cpack
(fabs(x), y), -1);
- return
cpack
(creal(z) * copysign(1, x), cimag(z));
+ z = __ldexp_cexp(
CMPLX
(fabs(x), y), -1);
+ return
CMPLX
(creal(z) * copysign(1, x), cimag(z));
} else {
/* x >= 1455: the result always overflows */
h = huge * x;
} else {
/* x >= 1455: the result always overflows */
h = huge * x;
- return
cpack
(h * cos(y), h * h * sin(y));
+ return
CMPLX
(h * cos(y), h * h * sin(y));
}
}
}
}
@@
-85,7
+85,7
@@
double complex csinh(double complex z)
* the same as d(NaN).
*/
if ((ix | lx) == 0 && iy >= 0x7ff00000)
* the same as d(NaN).
*/
if ((ix | lx) == 0 && iy >= 0x7ff00000)
- return
cpack
(copysign(0, x * (y - y)), y - y);
+ return
CMPLX
(copysign(0, x * (y - y)), y - y);
/*
* sinh(+-Inf +- I 0) = +-Inf + I +-0.
/*
* sinh(+-Inf +- I 0) = +-Inf + I +-0.
@@
-94,8
+94,8
@@
double complex csinh(double complex z)
*/
if ((iy | ly) == 0 && ix >= 0x7ff00000) {
if (((hx & 0xfffff) | lx) == 0)
*/
if ((iy | ly) == 0 && ix >= 0x7ff00000) {
if (((hx & 0xfffff) | lx) == 0)
- return
cpack
(x, y);
- return
cpack
(x, copysign(0, y));
+ return
CMPLX
(x, y);
+ return
CMPLX
(x, copysign(0, y));
}
/*
}
/*
@@
-107,7
+107,7
@@
double complex csinh(double complex z)
* nonzero x. Choice = don't raise (except for signaling NaNs).
*/
if (ix < 0x7ff00000 && iy >= 0x7ff00000)
* nonzero x. Choice = don't raise (except for signaling NaNs).
*/
if (ix < 0x7ff00000 && iy >= 0x7ff00000)
- return
cpack
(y - y, x * (y - y));
+ return
CMPLX
(y - y, x * (y - y));
/*
* sinh(+-Inf + I NaN) = +-Inf + I d(NaN).
/*
* sinh(+-Inf + I NaN) = +-Inf + I d(NaN).
@@
-122,8
+122,8
@@
double complex csinh(double complex z)
*/
if (ix >= 0x7ff00000 && ((hx & 0xfffff) | lx) == 0) {
if (iy >= 0x7ff00000)
*/
if (ix >= 0x7ff00000 && ((hx & 0xfffff) | lx) == 0) {
if (iy >= 0x7ff00000)
- return
cpack
(x * x, x * (y - y));
- return
cpack
(x * cos(y), INFINITY * sin(y));
+ return
CMPLX
(x * x, x * (y - y));
+ return
CMPLX
(x * cos(y), INFINITY * sin(y));
}
/*
}
/*
@@
-137,5
+137,5
@@
double complex csinh(double complex z)
* Optionally raises the invalid floating-point exception for finite
* nonzero y. Choice = don't raise (except for signaling NaNs).
*/
* Optionally raises the invalid floating-point exception for finite
* nonzero y. Choice = don't raise (except for signaling NaNs).
*/
- return
cpack
((x * x) * (y - y), (x + x) * (y - y));
+ return
CMPLX
((x * x) * (y - y), (x + x) * (y - y));
}
}
diff --git
a/src/complex/csinhf.c
b/src/complex/csinhf.c
index
bbb116c
..
49697f0
100644
(file)
--- a/
src/complex/csinhf.c
+++ b/
src/complex/csinhf.c
@@
-48,43
+48,43
@@
float complex 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
CMPLXF
(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
CMPLXF
(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
CMPLXF
(copysignf(h, x) * cosf(y), h * sinf(y));
} else if (ix < 0x4340b1e7) {
/* x < 192.7: scale to avoid overflow */
} 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));
+ z = __ldexp_cexpf(
CMPLXF
(fabsf(x), y), -1);
+ return
CMPLXF
(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
CMPLXF
(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
CMPLXF
(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
CMPLXF
(x, y);
+ return
CMPLXF
(x, copysignf(0, y));
}
if (ix < 0x7f800000 && iy >= 0x7f800000)
}
if (ix < 0x7f800000 && iy >= 0x7f800000)
- return
cpackf
(y - y, x * (y - y));
+ return
CMPLXF
(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
CMPLXF
(x * x, x * (y - y));
+ return
CMPLXF
(x * cosf(y), INFINITY * sinf(y));
}
}
- return
cpackf
((x * x) * (y - y), (x + x) * (y - y));
+ return
CMPLXF
((x * x) * (y - y), (x + x) * (y - y));
}
}
diff --git
a/src/complex/csinl.c
b/src/complex/csinl.c
index
4ad8674
..
4e9f86c
100644
(file)
--- a/
src/complex/csinl.c
+++ b/
src/complex/csinl.c
@@
-8,7
+8,7
@@
long double complex csinl(long double complex z)
#else
long double complex csinl(long double complex z)
{
#else
long double complex csinl(long double complex z)
{
- z = csinhl(
cpackl
(-cimagl(z), creall(z)));
- return
cpackl
(cimagl(z), -creall(z));
+ z = csinhl(
CMPLXL
(-cimagl(z), creall(z)));
+ return
CMPLXL
(cimagl(z), -creall(z));
}
#endif
}
#endif
diff --git
a/src/complex/csqrt.c
b/src/complex/csqrt.c
index
21fb879
..
8a2ba60
100644
(file)
--- a/
src/complex/csqrt.c
+++ b/
src/complex/csqrt.c
@@
-51,12
+51,12
@@
double complex csqrt(double complex z)
/* Handle special cases. */
if (z == 0)
/* Handle special cases. */
if (z == 0)
- return
cpack
(0, b);
+ return
CMPLX
(0, b);
if (isinf(b))
if (isinf(b))
- return
cpack
(INFINITY, b);
+ return
CMPLX
(INFINITY, b);
if (isnan(a)) {
t = (b - b) / (b - b); /* raise invalid if b is not a NaN */
if (isnan(a)) {
t = (b - b) / (b - b); /* raise invalid if b is not a NaN */
- return
cpack
(a, t); /* return NaN + NaN i */
+ return
CMPLX
(a, t); /* return NaN + NaN i */
}
if (isinf(a)) {
/*
}
if (isinf(a)) {
/*
@@
-66,9
+66,9
@@
double complex csqrt(double complex z)
* csqrt(-inf + y i) = 0 + inf i
*/
if (signbit(a))
* csqrt(-inf + y i) = 0 + inf i
*/
if (signbit(a))
- return
cpack
(fabs(b - b), copysign(a, b));
+ return
CMPLX
(fabs(b - b), copysign(a, b));
else
else
- return
cpack
(a, copysign(b - b, b));
+ return
CMPLX
(a, copysign(b - b, b));
}
/*
* The remaining special case (b is NaN) is handled just fine by
}
/*
* The remaining special case (b is NaN) is handled just fine by
@@
-87,10
+87,10
@@
double complex csqrt(double complex z)
/* Algorithm 312, CACM vol 10, Oct 1967. */
if (a >= 0) {
t = sqrt((a + hypot(a, b)) * 0.5);
/* Algorithm 312, CACM vol 10, Oct 1967. */
if (a >= 0) {
t = sqrt((a + hypot(a, b)) * 0.5);
- result =
cpack
(t, b / (2 * t));
+ result =
CMPLX
(t, b / (2 * t));
} else {
t = sqrt((-a + hypot(a, b)) * 0.5);
} else {
t = sqrt((-a + hypot(a, b)) * 0.5);
- result =
cpack
(fabs(b) / (2 * t), copysign(t, b));
+ result =
CMPLX
(fabs(b) / (2 * t), copysign(t, b));
}
/* Rescale. */
}
/* Rescale. */
diff --git
a/src/complex/csqrtf.c
b/src/complex/csqrtf.c
index
16487c2
..
ab5102f
100644
(file)
--- a/
src/complex/csqrtf.c
+++ b/
src/complex/csqrtf.c
@@
-43,12
+43,12
@@
float complex csqrtf(float complex z)
/* Handle special cases. */
if (z == 0)
/* Handle special cases. */
if (z == 0)
- return
cpackf
(0, b);
+ return
CMPLXF
(0, b);
if (isinf(b))
if (isinf(b))
- return
cpackf
(INFINITY, b);
+ return
CMPLXF
(INFINITY, b);
if (isnan(a)) {
t = (b - b) / (b - b); /* raise invalid if b is not a NaN */
if (isnan(a)) {
t = (b - b) / (b - b); /* raise invalid if b is not a NaN */
- return
cpackf
(a, t); /* return NaN + NaN i */
+ return
CMPLXF
(a, t); /* return NaN + NaN i */
}
if (isinf(a)) {
/*
}
if (isinf(a)) {
/*
@@
-58,9
+58,9
@@
float complex csqrtf(float complex z)
* csqrtf(-inf + y i) = 0 + inf i
*/
if (signbit(a))
* csqrtf(-inf + y i) = 0 + inf i
*/
if (signbit(a))
- return
cpackf
(fabsf(b - b), copysignf(a, b));
+ return
CMPLXF
(fabsf(b - b), copysignf(a, b));
else
else
- return
cpackf
(a, copysignf(b - b, b));
+ return
CMPLXF
(a, copysignf(b - b, b));
}
/*
* The remaining special case (b is NaN) is handled just fine by
}
/*
* The remaining special case (b is NaN) is handled just fine by
@@
-74,9
+74,9
@@
float complex csqrtf(float complex z)
*/
if (a >= 0) {
t = sqrt((a + hypot(a, b)) * 0.5);
*/
if (a >= 0) {
t = sqrt((a + hypot(a, b)) * 0.5);
- return
cpackf
(t, b / (2.0 * t));
+ return
CMPLXF
(t, b / (2.0 * t));
} else {
t = sqrt((-a + hypot(a, b)) * 0.5);
} else {
t = sqrt((-a + hypot(a, b)) * 0.5);
- return
cpackf
(fabsf(b) / (2.0 * t), copysignf(t, b));
+ return
CMPLXF
(fabsf(b) / (2.0 * t), copysignf(t, b));
}
}
}
}
diff --git
a/src/complex/ctan.c
b/src/complex/ctan.c
index
4741a4d
..
c092637
100644
(file)
--- a/
src/complex/ctan.c
+++ b/
src/complex/ctan.c
@@
-4,6
+4,6
@@
double complex ctan(double complex z)
{
double complex ctan(double complex z)
{
- z = ctanh(
cpack
(-cimag(z), creal(z)));
- return
cpack
(cimag(z), -creal(z));
+ z = ctanh(
CMPLX
(-cimag(z), creal(z)));
+ return
CMPLX
(cimag(z), -creal(z));
}
}
diff --git
a/src/complex/ctanf.c
b/src/complex/ctanf.c
index
9bbeb05
..
009b192
100644
(file)
--- a/
src/complex/ctanf.c
+++ b/
src/complex/ctanf.c
@@
-2,6
+2,6
@@
float complex ctanf(float complex z)
{
float complex ctanf(float complex z)
{
- z = ctanhf(
cpackf
(-cimagf(z), crealf(z)));
- return
cpackf
(cimagf(z), -crealf(z));
+ z = ctanhf(
CMPLXF
(-cimagf(z), crealf(z)));
+ return
CMPLXF
(cimagf(z), -crealf(z));
}
}
diff --git
a/src/complex/ctanh.c
b/src/complex/ctanh.c
index
dd569fc
..
0461050
100644
(file)
--- a/
src/complex/ctanh.c
+++ b/
src/complex/ctanh.c
@@
-95,9
+95,9
@@
double complex ctanh(double complex z)
*/
if (ix >= 0x7ff00000) {
if ((ix & 0xfffff) | lx) /* x is NaN */
*/
if (ix >= 0x7ff00000) {
if ((ix & 0xfffff) | lx) /* x is NaN */
- return
cpack
(x, (y == 0 ? y : x * y));
+ return
CMPLX
(x, (y == 0 ? y : x * y));
SET_HIGH_WORD(x, hx - 0x40000000); /* x = copysign(1, x) */
SET_HIGH_WORD(x, hx - 0x40000000); /* x = copysign(1, x) */
- return
cpack
(x, copysign(0, isinf(y) ? y : sin(y) * cos(y)));
+ return
CMPLX
(x, copysign(0, isinf(y) ? y : sin(y) * cos(y)));
}
/*
}
/*
@@
-105,7
+105,7
@@
double complex ctanh(double complex z)
* ctanh(x +- i Inf) = NaN + i NaN
*/
if (!isfinite(y))
* ctanh(x +- i Inf) = NaN + i NaN
*/
if (!isfinite(y))
- return
cpack
(y - y, y - y);
+ return
CMPLX
(y - y, y - y);
/*
* ctanh(+-huge + i +-y) ~= +-1 +- i 2sin(2y)/exp(2x), using the
/*
* ctanh(+-huge + i +-y) ~= +-1 +- i 2sin(2y)/exp(2x), using the
@@
-114,7
+114,7
@@
double complex ctanh(double complex z)
*/
if (ix >= 0x40360000) { /* x >= 22 */
double exp_mx = exp(-fabs(x));
*/
if (ix >= 0x40360000) { /* x >= 22 */
double exp_mx = exp(-fabs(x));
- return
cpack
(copysign(1, x), 4 * sin(y) * cos(y) * exp_mx * exp_mx);
+ return
CMPLX
(copysign(1, x), 4 * sin(y) * cos(y) * exp_mx * exp_mx);
}
/* Kahan's algorithm */
}
/* Kahan's algorithm */
@@
-123,5
+123,5
@@
double complex ctanh(double complex z)
s = sinh(x);
rho = sqrt(1 + s * s); /* = cosh(x) */
denom = 1 + beta * s * s;
s = sinh(x);
rho = sqrt(1 + s * s); /* = cosh(x) */
denom = 1 + beta * s * s;
- return
cpack
((beta * rho * s) / denom, t / denom);
+ return
CMPLX
((beta * rho * s) / denom, t / denom);
}
}
diff --git
a/src/complex/ctanhf.c
b/src/complex/ctanhf.c
index
7d74613
..
a7e1a5f
100644
(file)
--- a/
src/complex/ctanhf.c
+++ b/
src/complex/ctanhf.c
@@
-44,17
+44,17
@@
float complex ctanhf(float complex z)
if (ix >= 0x7f800000) {
if (ix & 0x7fffff)
if (ix >= 0x7f800000) {
if (ix & 0x7fffff)
- return
cpackf
(x, (y == 0 ? y : x * y));
+ return
CMPLXF
(x, (y == 0 ? y : x * y));
SET_FLOAT_WORD(x, hx - 0x40000000);
SET_FLOAT_WORD(x, hx - 0x40000000);
- return
cpackf
(x, copysignf(0, isinf(y) ? y : sinf(y) * cosf(y)));
+ return
CMPLXF
(x, copysignf(0, isinf(y) ? y : sinf(y) * cosf(y)));
}
if (!isfinite(y))
}
if (!isfinite(y))
- return
cpackf
(y - y, y - y);
+ return
CMPLXF
(y - y, y - y);
if (ix >= 0x41300000) { /* x >= 11 */
float exp_mx = expf(-fabsf(x));
if (ix >= 0x41300000) { /* x >= 11 */
float exp_mx = expf(-fabsf(x));
- return
cpackf
(copysignf(1, x), 4 * sinf(y) * cosf(y) * exp_mx * exp_mx);
+ return
CMPLXF
(copysignf(1, x), 4 * sinf(y) * cosf(y) * exp_mx * exp_mx);
}
t = tanf(y);
}
t = tanf(y);
@@
-62,5
+62,5
@@
float complex ctanhf(float complex z)
s = sinhf(x);
rho = sqrtf(1 + s * s);
denom = 1 + beta * s * s;
s = sinhf(x);
rho = sqrtf(1 + s * s);
denom = 1 + beta * s * s;
- return
cpackf
((beta * rho * s) / denom, t / denom);
+ return
CMPLXF
((beta * rho * s) / denom, t / denom);
}
}
diff --git
a/src/complex/ctanl.c
b/src/complex/ctanl.c
index
4b4c99b
..
ac1c3e0
100644
(file)
--- a/
src/complex/ctanl.c
+++ b/
src/complex/ctanl.c
@@
-8,7
+8,7
@@
long double complex ctanl(long double complex z)
#else
long double complex ctanl(long double complex z)
{
#else
long double complex ctanl(long double complex z)
{
- z = ctanhl(
cpackl
(-cimagl(z), creall(z)));
- return
cpackl
(cimagl(z), -creall(z));
+ z = ctanhl(
CMPLXL
(-cimagl(z), creall(z)));
+ return
CMPLXL
(cimagl(z), -creall(z));
}
#endif
}
#endif
diff --git
a/src/internal/libm.h
b/src/internal/libm.h
index
a71c4c0
..
dfecd83
100644
(file)
--- a/
src/internal/libm.h
+++ b/
src/internal/libm.h
@@
-170,25
+170,12
@@
long double __p1evll(long double, const long double *, int);
#define STRICT_ASSIGN(type, lval, rval) ((lval) = (type)(rval))
#endif
#define STRICT_ASSIGN(type, lval, rval) ((lval) = (type)(rval))
#endif
-
/* complex */
/* complex */
-union dcomplex {
- double complex z;
- double a[2];
-};
-union fcomplex {
- float complex z;
- float a[2];
-};
-union lcomplex {
- long double complex z;
- long double a[2];
-};
-
-/* x + y*I is not supported properly by gcc */
-#define cpack(x,y) ((union dcomplex){.a={(x),(y)}}.z)
-#define cpackf(x,y) ((union fcomplex){.a={(x),(y)}}.z)
-#define cpackl(x,y) ((union lcomplex){.a={(x),(y)}}.z)
+#ifndef CMPLX
+#define CMPLX(x, y) __CMPLX(x, y, double)
+#define CMPLXF(x, y) __CMPLX(x, y, float)
+#define CMPLXL(x, y) __CMPLX(x, y, long double)
+#endif
#endif
#endif