mirror of
git://git.musl-libc.org/musl
synced 2025-04-01 22:48:38 +00:00
math: move complex math out of libm.h
This makes it easier to build musl math code with a compiler that does not support complex types (tcc) and in general more sensible factorization of the internal headers.
This commit is contained in:
parent
e980ca7a57
commit
2d72b58070
@ -25,7 +25,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const uint32_t k = 1799; /* constant for reduction */
|
||||
static const double kln2 = 1246.97177782734161156; /* k * ln2 */
|
||||
|
@ -25,7 +25,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const uint32_t k = 235; /* constant for reduction */
|
||||
static const float kln2 = 162.88958740F; /* k * ln2 */
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
double cabs(double complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float cabsf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double cabsl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
// FIXME: Hull et al. "Implementing the complex arcsine and arccosine functions using exception handling" 1997
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
// FIXME
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/* acosh(z) = i acos(z) */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex cacoshf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex cacoshl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex cacosl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
double carg(double complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float cargf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double cargl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
// FIXME
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
// FIXME
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/* asinh(z) = -i asin(i z) */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex casinhf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex casinhl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex casinl(long double complex z)
|
||||
|
@ -58,7 +58,7 @@
|
||||
* 2.9e-17. See also clog().
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#define MAXNUM 1.0e308
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
||||
* IEEE -10,+10 30000 2.3e-6 5.2e-8
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#define MAXNUMF 1.0e38F
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/* atanh = -i atan(i z) */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex catanhf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex catanhl(long double complex z)
|
||||
|
@ -59,7 +59,7 @@
|
||||
|
||||
#include <complex.h>
|
||||
#include <float.h>
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex catanl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/* cos(z) = cosh(i z) */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex ccosf(float complex z)
|
||||
{
|
||||
|
@ -34,7 +34,7 @@
|
||||
* These values and the return value were taken from n1124.pdf.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const double huge = 0x1p1023;
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
* Hyperbolic cosine of a complex argument. See s_ccosh.c for details.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const float huge = 0x1p127;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
//FIXME
|
||||
long double complex ccoshl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex ccosl(long double complex z)
|
||||
|
@ -25,7 +25,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const uint32_t
|
||||
exp_ovfl = 0x40862e42, /* high bits of MAX_EXP * ln2 ~= 710 */
|
||||
|
@ -25,7 +25,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const uint32_t
|
||||
exp_ovfl = 0x42b17218, /* MAX_EXP * ln2 ~= 88.722839355 */
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
//FIXME
|
||||
long double complex cexpl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
double (cimag)(double complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float (cimagf)(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
long double (cimagl)(long double complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
// FIXME
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
// FIXME
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex clogl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
double complex conj(double complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex conjf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
long double complex conjl(long double complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/* pow(z, c) = exp(c log(z)), See C99 G.6.4.1 */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex cpowf(float complex z, float complex c)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex cpowl(long double complex z, long double complex c)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
double complex cproj(double complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex cprojf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex cprojl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/* sin(z) = -i sinh(i z) */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex csinf(float complex z)
|
||||
{
|
||||
|
@ -34,7 +34,7 @@
|
||||
* These values and the return value were taken from n1124.pdf.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const double huge = 0x1p1023;
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
* Hyperbolic sine of a complex argument z. See s_csinh.c for details.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
static const float huge = 0x1p127;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
//FIXME
|
||||
long double complex csinhl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex csinl(long double complex z)
|
||||
|
@ -25,7 +25,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/*
|
||||
* gcc doesn't implement complex multiplication or division correctly,
|
||||
|
@ -25,7 +25,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/*
|
||||
* gcc doesn't implement complex multiplication or division correctly,
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
//FIXME
|
||||
long double complex csqrtl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
/* tan(z) = -i tanh(i z) */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex ctanf(float complex z)
|
||||
{
|
||||
|
@ -63,7 +63,7 @@
|
||||
* precision. I also handle large x differently.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
double complex ctanh(double complex z)
|
||||
{
|
||||
|
@ -28,7 +28,7 @@
|
||||
* Hyperbolic tangent of a complex argument z. See s_ctanh.c for details.
|
||||
*/
|
||||
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
float complex ctanhf(float complex z)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
//FIXME
|
||||
long double complex ctanhl(long double complex z)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "libm.h"
|
||||
#include "complex_impl.h"
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
long double complex ctanl(long double complex z)
|
||||
|
22
src/internal/complex_impl.h
Normal file
22
src/internal/complex_impl.h
Normal file
@ -0,0 +1,22 @@
|
||||
#ifndef _COMPLEX_IMPL_H
|
||||
#define _COMPLEX_IMPL_H
|
||||
|
||||
#include <complex.h>
|
||||
#include "libm.h"
|
||||
|
||||
#undef __CMPLX
|
||||
#undef CMPLX
|
||||
#undef CMPLXF
|
||||
#undef CMPLXL
|
||||
|
||||
#define __CMPLX(x, y, t) \
|
||||
((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)
|
||||
|
||||
#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)
|
||||
|
||||
hidden double complex __ldexp_cexp(double complex,int);
|
||||
hidden float complex __ldexp_cexpf(float complex,int);
|
||||
|
||||
#endif
|
@ -16,7 +16,6 @@
|
||||
#include <stdint.h>
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <complex.h>
|
||||
#include <endian.h>
|
||||
|
||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||
@ -153,18 +152,6 @@ do { \
|
||||
(d) = __u.f; \
|
||||
} while (0)
|
||||
|
||||
#undef __CMPLX
|
||||
#undef CMPLX
|
||||
#undef CMPLXF
|
||||
#undef CMPLXL
|
||||
|
||||
#define __CMPLX(x, y, t) \
|
||||
((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)
|
||||
|
||||
#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)
|
||||
|
||||
/* fdlibm kernel functions */
|
||||
|
||||
hidden int __rem_pio2_large(double*,double*,int,int,int);
|
||||
@ -174,14 +161,12 @@ hidden double __sin(double,double,int);
|
||||
hidden double __cos(double,double);
|
||||
hidden double __tan(double,double,int);
|
||||
hidden double __expo2(double);
|
||||
hidden double complex __ldexp_cexp(double complex,int);
|
||||
|
||||
hidden int __rem_pio2f(float,double*);
|
||||
hidden float __sindf(double);
|
||||
hidden float __cosdf(double);
|
||||
hidden float __tandf(double,int);
|
||||
hidden float __expo2f(float);
|
||||
hidden float complex __ldexp_cexpf(float complex,int);
|
||||
|
||||
hidden int __rem_pio2l(long double, long double *);
|
||||
hidden long double __sinl(long double, long double, int);
|
||||
|
Loading…
Reference in New Issue
Block a user