mirror of git://git.musl-libc.org/musl
add creal/cimag macros in complex.h (and use them in the functions defs)
This commit is contained in:
parent
132f0a0083
commit
13e400b355
|
@ -97,6 +97,17 @@ double creal(double complex);
|
||||||
float crealf(float complex);
|
float crealf(float complex);
|
||||||
long double creall(long double complex);
|
long double creall(long double complex);
|
||||||
|
|
||||||
|
#define __CREALIMAG(x, t, i) \
|
||||||
|
((union { _Complex t __z; t __xy[2]; }){(_Complex t)(x)}.__xy[i])
|
||||||
|
|
||||||
|
#define creal(x) __CREALIMAG(x, double, 0)
|
||||||
|
#define crealf(x) __CREALIMAG(x, float, 0)
|
||||||
|
#define creall(x) __CREALIMAG(x, long double, 0)
|
||||||
|
|
||||||
|
#define cimag(x) __CREALIMAG(x, double, 1)
|
||||||
|
#define cimagf(x) __CREALIMAG(x, float, 1)
|
||||||
|
#define cimagl(x) __CREALIMAG(x, long double, 1)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,6 +2,5 @@
|
||||||
|
|
||||||
double (cimag)(double complex z)
|
double (cimag)(double complex z)
|
||||||
{
|
{
|
||||||
union dcomplex u = {z};
|
return cimag(z);
|
||||||
return u.a[1];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,5 @@
|
||||||
|
|
||||||
float (cimagf)(float complex z)
|
float (cimagf)(float complex z)
|
||||||
{
|
{
|
||||||
union fcomplex u = {z};
|
return cimagf(z);
|
||||||
return u.a[1];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,5 @@
|
||||||
|
|
||||||
long double (cimagl)(long double complex z)
|
long double (cimagl)(long double complex z)
|
||||||
{
|
{
|
||||||
union lcomplex u = {z};
|
return cimagl(z);
|
||||||
return u.a[1];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <complex.h>
|
#include <complex.h>
|
||||||
|
|
||||||
double creal(double complex z)
|
double (creal)(double complex z)
|
||||||
{
|
{
|
||||||
return z;
|
return creal(z);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <complex.h>
|
#include <complex.h>
|
||||||
|
|
||||||
float crealf(float complex z)
|
float (crealf)(float complex z)
|
||||||
{
|
{
|
||||||
return z;
|
return crealf(z);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <complex.h>
|
#include <complex.h>
|
||||||
|
|
||||||
long double creall(long double complex z)
|
long double (creall)(long double complex z)
|
||||||
{
|
{
|
||||||
return z;
|
return creall(z);
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,14 +173,6 @@ union lcomplex {
|
||||||
long double a[2];
|
long double a[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME: move to complex.h ?
|
|
||||||
#define creal(z) ((double)(z))
|
|
||||||
#define crealf(z) ((float)(z))
|
|
||||||
#define creall(z) ((long double)(z))
|
|
||||||
#define cimag(z) ((union dcomplex){(z)}.a[1])
|
|
||||||
#define cimagf(z) ((union fcomplex){(z)}.a[1])
|
|
||||||
#define cimagl(z) ((union lcomplex){(z)}.a[1])
|
|
||||||
|
|
||||||
/* x + y*I is not supported properly by gcc */
|
/* x + y*I is not supported properly by gcc */
|
||||||
#define cpack(x,y) ((union dcomplex){.a={(x),(y)}}.z)
|
#define cpack(x,y) ((union dcomplex){.a={(x),(y)}}.z)
|
||||||
#define cpackf(x,y) ((union fcomplex){.a={(x),(y)}}.z)
|
#define cpackf(x,y) ((union fcomplex){.a={(x),(y)}}.z)
|
||||||
|
|
Loading…
Reference in New Issue