323 lines
11 KiB
C
323 lines
11 KiB
C
#if __INCLUDE_LEVEL__ + 0 > 1
|
|
#error "jart asks please don't #include tgmath.h from header"
|
|
#endif
|
|
#ifndef COSMOPOLITAN_LIBC_MATH_TGMATH_H_
|
|
#define COSMOPOLITAN_LIBC_MATH_TGMATH_H_
|
|
#include "libc/math.h"
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
#if __STDC_VERSION__ + 0 >= 201112
|
|
|
|
/*─────────────────────────────────────────────────────────────────────────────╗
|
|
│ cosmopolitan § lazy mathematics │
|
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
|
|
#define pow(X, Z) \
|
|
_Generic((Z), complex long double \
|
|
: cpowl, complex float \
|
|
: cpowf, complex double \
|
|
: cpow, long double \
|
|
: powl, float \
|
|
: powf, default \
|
|
: pow)(X, Z)
|
|
|
|
#define sqrt(X) \
|
|
_Generic((X), complex long double \
|
|
: csqrtl, complex float \
|
|
: csqrtf, complex double \
|
|
: csqrt, long double \
|
|
: sqrtl, float \
|
|
: sqrtf, double \
|
|
: sqrt, default \
|
|
: sqrt)(X)
|
|
|
|
#define exp(X) \
|
|
_Generic((X), complex long double \
|
|
: cexpl, complex float \
|
|
: cexpf, complex double \
|
|
: cexp, long double \
|
|
: expl, float \
|
|
: expf, default \
|
|
: exp)(X)
|
|
|
|
#define exp2(X) \
|
|
_Generic((X), complex long double \
|
|
: cexp2l, complex float \
|
|
: cexp2f, complex double \
|
|
: cexp2, long double \
|
|
: exp2l, float \
|
|
: exp2f, default \
|
|
: exp2)(X)
|
|
|
|
#define sin(X) \
|
|
_Generic((X), complex long double \
|
|
: csinl, complex float \
|
|
: csinf, complex double \
|
|
: csin, long double \
|
|
: sinl, float \
|
|
: sinf, default \
|
|
: sin)(X)
|
|
|
|
#define sinh(X) \
|
|
_Generic((X), complex long double \
|
|
: csinhl, complex float \
|
|
: csinhf, complex double \
|
|
: csinh, long double \
|
|
: sinhl, float \
|
|
: sinhf, default \
|
|
: sinh)(X)
|
|
|
|
#define asin(X) \
|
|
_Generic((X), complex long double \
|
|
: casinl, complex float \
|
|
: casinf, complex double \
|
|
: casin, long double \
|
|
: asinl, float \
|
|
: asinf, default \
|
|
: asin)(X)
|
|
|
|
#define asinh(X) \
|
|
_Generic((X), complex long double \
|
|
: casinhl, complex float \
|
|
: casinhf, complex double \
|
|
: casinh, long double \
|
|
: asinhl, float \
|
|
: asinhf, default \
|
|
: asinh)(X)
|
|
|
|
#define cos(X) \
|
|
_Generic((X), complex long double \
|
|
: ccosl, complex float \
|
|
: ccosf, complex double \
|
|
: ccos, long double \
|
|
: cosl, float \
|
|
: cosf, default \
|
|
: cos)(X)
|
|
|
|
#define cosh(X) \
|
|
_Generic((X), complex long double \
|
|
: ccoshl, complex float \
|
|
: ccoshf, complex double \
|
|
: ccosh, long double \
|
|
: coshl, float \
|
|
: coshf, default \
|
|
: cosh)(X)
|
|
|
|
#define acos(X) \
|
|
_Generic((X), complex long double \
|
|
: cacosl, complex double \
|
|
: cacos, complex float \
|
|
: cacosf, long double \
|
|
: acosl, float \
|
|
: acosf, double \
|
|
: acos)(X)
|
|
|
|
#define acosh(X) \
|
|
_Generic((X), complex long double \
|
|
: cacoshl, complex float \
|
|
: cacoshf, complex double \
|
|
: cacosh, long double \
|
|
: acoshl, float \
|
|
: acoshf, default \
|
|
: acosh)(X)
|
|
|
|
#define tan(X) \
|
|
_Generic((X), complex long double \
|
|
: ctanl, complex float \
|
|
: ctanf, complex double \
|
|
: ctan, long double \
|
|
: tanl, float \
|
|
: tanf, default \
|
|
: tan)(X)
|
|
|
|
#define tanh(X) \
|
|
_Generic((X), complex long double \
|
|
: ctanhl, complex float \
|
|
: ctanhf, complex double \
|
|
: ctanh, long double \
|
|
: tanhl, float \
|
|
: tanhf, default \
|
|
: tanh)(X)
|
|
|
|
#define atan(X) \
|
|
_Generic((X), complex long double \
|
|
: catanl, complex float \
|
|
: catanf, complex double \
|
|
: catan, long double \
|
|
: atanl, float \
|
|
: atanf, default \
|
|
: atan)(X)
|
|
|
|
#define atanh(X) \
|
|
_Generic((X), complex long double \
|
|
: catanhl, complex float \
|
|
: catanhf, complex double \
|
|
: catanh, long double \
|
|
: atanhl, float \
|
|
: atanhf, default \
|
|
: atanh)(X)
|
|
|
|
#define atan2(X, Y) \
|
|
_Generic((X), long double : atan2l, float : atan2f, default : atan2)(X, Y)
|
|
|
|
#define log(X) \
|
|
_Generic((X), complex long double \
|
|
: clogl, complex float \
|
|
: clogf, complex double \
|
|
: clog, long double \
|
|
: logl, float \
|
|
: logf, default \
|
|
: log)(X)
|
|
|
|
#define onj(Z) \
|
|
_Generic((Z), complex long double \
|
|
: conjl, complex float \
|
|
: conjf, complex double \
|
|
: conj)(Z)
|
|
|
|
#define proj(Z) \
|
|
_Generic((Z), complex long double \
|
|
: cprojl, complex float \
|
|
: cprojf, complex double \
|
|
: cproj)(Z)
|
|
|
|
#define real(Z) \
|
|
_Generic((Z), complex long double \
|
|
: creall, complex float \
|
|
: crealf, complex double \
|
|
: creal)(Z)
|
|
|
|
#define carg(Z) \
|
|
_Generic((Z), complex long double \
|
|
: cargl, complex float \
|
|
: cargf, default \
|
|
: carg)(Z)
|
|
|
|
#define cimag(Z) \
|
|
_Generic((Z), complex long double \
|
|
: cimagl, complex float \
|
|
: cimagf, complex double \
|
|
: cimag)(Z)
|
|
|
|
#define nearbyint(X) \
|
|
_Generic((X), long double \
|
|
: nearbyintl, float \
|
|
: nearbyintf, default \
|
|
: nearbyint)(X)
|
|
|
|
#define nextafter(X, Y) \
|
|
_Generic((X), long double \
|
|
: nextafterl, float \
|
|
: nextafterf, default \
|
|
: nextafter)(X, Y)
|
|
|
|
#define nexttoward(X, Y) \
|
|
_Generic((X), long double \
|
|
: nexttowardl, float \
|
|
: nexttowardf, default \
|
|
: nexttoward)(X, Y)
|
|
|
|
#define remainder(X, Y) \
|
|
_Generic((X), long double \
|
|
: remainderl, float \
|
|
: remainderf, default \
|
|
: remainder)(X, Y)
|
|
|
|
#define remquo(X, Y, Q) \
|
|
_Generic((X), long double \
|
|
: remquol, float \
|
|
: remquof, default \
|
|
: remquo)(X, Y, Q)
|
|
|
|
#define pow10(X) \
|
|
_Generic((X), long double : pow10l, float : pow10f, default : pow10)(X)
|
|
#define powi(X, Y) \
|
|
_Generic((X), long double : powil, float : powif, default : powi)(X, Y)
|
|
#define exp10(X) \
|
|
_Generic((X), long double : exp10l, float : exp10f, default : exp10)(X)
|
|
#define log10(X) \
|
|
_Generic((X), long double : log10l, float : log10f, default : log10)(X)
|
|
#define log1p(X) \
|
|
_Generic((X), long double : log1pl, float : log1pf, default : log1p)(X)
|
|
#define log2(X) \
|
|
_Generic((X), long double : log2l, float : log2f, default : log2)(X)
|
|
#define logb(X) \
|
|
_Generic((X), long double : logbl, float : logbf, default : logb)(X)
|
|
#define expm1(X) \
|
|
_Generic((X), long double : expm1l, float : expm1f, default : expm1)(X)
|
|
#define cbrt(X) \
|
|
_Generic((X), long double : cbrtl, float : cbrtf, default : cbrt)(X)
|
|
|
|
#define fabs(X) \
|
|
_Generic((X), long double : fabsl, float : fabsf, default : fabs)(X)
|
|
|
|
#define fmax(X, Y) \
|
|
_Generic((X), long double : fmaxl, float : fmaxf, default : fmax)(X, Y)
|
|
#define fmin(X, Y) \
|
|
_Generic((X), long double : fminl, float : fminf, default : fmin)(X, Y)
|
|
#define fmod(X, Y) \
|
|
_Generic((X), long double : fmodl, float : fmodf, default : fmod)(X, Y)
|
|
#define frexp(X, Y) \
|
|
_Generic((X), long double : frexpl, float : frexpf, default : frexp)(X, Y)
|
|
#define gamma(X) \
|
|
_Generic((X), long double : gammal, float : gammaf, default : gamma)(X)
|
|
#define hypot(X, Y) \
|
|
_Generic((X), long double : hypotl, float : hypotf, default : hypot)(X, Y)
|
|
#define modf(X, Y) \
|
|
_Generic((X), long double : modfl, float : modff, default : modf)(X, Y)
|
|
|
|
#define rint(X) \
|
|
_Generic((X), long double : rintl, float : rintf, default : rint)(X)
|
|
#define ceil(X) \
|
|
_Generic((X), long double : ceill, float : ceilf, default : ceil)(X)
|
|
#define floor(X) \
|
|
_Generic((X), long double : floorl, float : floorf, default : floor)(X)
|
|
#define drem(X, Y) \
|
|
_Generic((X), long double : dreml, float : dremf, default : drem)(X, Y)
|
|
#define erf(X) _Generic((X), long double : erfl, float : erff, default : erf)(X)
|
|
#define erfc(X) \
|
|
_Generic((X), long double : erfcl, float : erfcf, default : erfc)(X)
|
|
#define fdim(X, Y) \
|
|
_Generic((X), long double : fdiml, float : fdimf, default : fdim)(X, Y)
|
|
|
|
#define j0(X) _Generic((X), long double : j0l, float : j0f, default : j0)(X)
|
|
#define j1(X) _Generic((X), long double : j1l, float : j1f, default : j1)(X)
|
|
#define jn(N, X) \
|
|
_Generic((X), long double : jnl, float : jnf, default : jn)(N, X)
|
|
#define ldexp(X, N) \
|
|
_Generic((X), long double : ldexpl, float : ldexpf, default : ldexp)(X, N)
|
|
#define lgamma(X) \
|
|
_Generic((X), long double : lgammal, float : lgammaf, default : lgamma)(X)
|
|
#define round(X) \
|
|
_Generic((X), long double : roundl, float : roundf, default : round)(X)
|
|
#define scalb(X, Y) \
|
|
_Generic((X), long double : scalbl, float : scalbf, default : scalb)(X, Y)
|
|
#define scalbln(X, Y) \
|
|
_Generic((X), long double \
|
|
: scalblnl, default \
|
|
: scalbln, float \
|
|
: scalblnf)(X, Y)
|
|
#define scalbn(X, Y) \
|
|
_Generic((X), long double : scalbnl, float : scalbnf, default : scalbn)(X, Y)
|
|
#define significand(X) \
|
|
_Generic((X), long double \
|
|
: significandl, default \
|
|
: significand, float \
|
|
: significandf)(X)
|
|
#define copysign(X) \
|
|
_Generic((X), long double \
|
|
: copysignl, default \
|
|
: copysign, float \
|
|
: copysignf)(X)
|
|
#define tgamma(X) \
|
|
_Generic((X), long double : tgammal, float : tgammaf, default : tgamma)(X)
|
|
#define trunc(X) \
|
|
_Generic((X), long double : truncl, float : truncf, default : trunc)(X)
|
|
#define y0(X) _Generic((X), long double : y0l, float : y0f, default : y0)(X)
|
|
#define y1(X) _Generic((X), long double : y1l, float : y1f, default : y1)(X)
|
|
#define yn(N, X) \
|
|
_Generic((X), long double : ynl, float : ynf, default : yn)(N, X)
|
|
|
|
#endif /* C11 */
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* COSMOPOLITAN_LIBC_MATH_TGMATH_H_ */
|