mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
322 lines
9 KiB
C
322 lines
9 KiB
C
#ifndef _TGMATH_H
|
|
#define _TGMATH_H
|
|
#include "libc/complex.h"
|
|
#include "libc/imag.h"
|
|
#include "libc/math.h"
|
|
#if __STDC_VERSION__ + 0 >= 201112
|
|
|
|
/* from https://en.cppreference.com/w/c/numeric/tgmath */
|
|
|
|
#define fabs(x) \
|
|
_Generic((x), \
|
|
float: fabsf, \
|
|
default: fabs, \
|
|
long double: fabsl, \
|
|
complex float: cabsf, \
|
|
complex double: cabs, \
|
|
complex long double: cabsl)(x)
|
|
|
|
#define exp(x) \
|
|
_Generic((x), \
|
|
float: expf, \
|
|
default: exp, \
|
|
long double: expl, \
|
|
complex float: cexpf, \
|
|
complex double: cexp, \
|
|
complex long double: cexpl)(x)
|
|
|
|
#define log(x) \
|
|
_Generic((x), \
|
|
float: logf, \
|
|
default: log, \
|
|
long double: logl, \
|
|
complex float: clogf, \
|
|
complex double: clog, \
|
|
complex long double: clogl)(x)
|
|
|
|
#define pow(x, y) \
|
|
_Generic((x), \
|
|
float: powf, \
|
|
default: pow, \
|
|
long double: powl, \
|
|
complex float: cpowf, \
|
|
complex double: cpow, \
|
|
complex long double: cpowl)(x, y)
|
|
|
|
#define sqrt(x) \
|
|
_Generic((x), \
|
|
float: sqrtf, \
|
|
default: sqrt, \
|
|
long double: sqrtl, \
|
|
complex float: csqrtf, \
|
|
complex double: csqrt, \
|
|
complex long double: csqrtl)(x)
|
|
|
|
#define sin(x) \
|
|
_Generic((x), \
|
|
float: sinf, \
|
|
default: sin, \
|
|
long double: sinl, \
|
|
complex float: csinf, \
|
|
complex double: csin, \
|
|
complex long double: csinl)(x)
|
|
|
|
#define cos(x) \
|
|
_Generic((x), \
|
|
float: cosf, \
|
|
default: cos, \
|
|
long double: cosl, \
|
|
complex float: ccosf, \
|
|
complex double: ccos, \
|
|
complex long double: ccosl)(x)
|
|
|
|
#define tan(x) \
|
|
_Generic((x), \
|
|
float: tanf, \
|
|
default: tan, \
|
|
long double: tanl, \
|
|
complex float: ctanf, \
|
|
complex double: ctan, \
|
|
complex long double: ctanl)(x)
|
|
|
|
#define asin(x) \
|
|
_Generic((x), \
|
|
float: asinf, \
|
|
default: asin, \
|
|
long double: asinl, \
|
|
complex float: casinf, \
|
|
complex double: casin, \
|
|
complex long double: casinl)(x)
|
|
|
|
#define acos(x) \
|
|
_Generic((x), \
|
|
float: acosf, \
|
|
default: acos, \
|
|
long double: acosl, \
|
|
complex float: cacosf, \
|
|
complex double: cacos, \
|
|
complex long double: cacosl)(x)
|
|
|
|
#define atan(x) \
|
|
_Generic((x), \
|
|
float: atanf, \
|
|
default: atan, \
|
|
long double: atanl, \
|
|
complex float: catanf, \
|
|
complex double: catan, \
|
|
complex long double: catanl)(x)
|
|
|
|
#define sinh(x) \
|
|
_Generic((x), \
|
|
float: sinhf, \
|
|
default: sinh, \
|
|
long double: sinhl, \
|
|
complex float: csinhf, \
|
|
complex double: csinh, \
|
|
complex long double: csinhl)(x)
|
|
|
|
#define cosh(x) \
|
|
_Generic((x), \
|
|
float: coshf, \
|
|
default: cosh, \
|
|
long double: coshl, \
|
|
complex float: ccoshf, \
|
|
complex double: ccosh, \
|
|
complex long double: ccoshl)(x)
|
|
|
|
#define tanh(x) \
|
|
_Generic((x), \
|
|
float: tanhf, \
|
|
default: tanh, \
|
|
long double: tanhl, \
|
|
complex float: ctanhf, \
|
|
complex double: ctanh, \
|
|
complex long double: ctanhl)(x)
|
|
|
|
#define asinh(x) \
|
|
_Generic((x), \
|
|
float: asinhf, \
|
|
default: asinh, \
|
|
long double: asinhl, \
|
|
complex float: casinhf, \
|
|
complex double: casinh, \
|
|
complex long double: casinhl)(x)
|
|
|
|
#define acosh(x) \
|
|
_Generic((x), \
|
|
float: acoshf, \
|
|
default: acosh, \
|
|
long double: acoshl, \
|
|
complex float: cacoshf, \
|
|
complex double: cacosh, \
|
|
complex long double: cacoshl)(x)
|
|
|
|
#define atanh(x) \
|
|
_Generic((x), \
|
|
float: atanhf, \
|
|
default: atanh, \
|
|
long double: atanhl, \
|
|
complex float: catanhf, \
|
|
complex double: catanh, \
|
|
complex long double: catanhl)(x)
|
|
|
|
#define atan2(x, y) \
|
|
_Generic((x), float: atan2f, default: atan2, long double: atan2l)(x, y)
|
|
|
|
#define cbrt(x) \
|
|
_Generic((x), float: cbrtf, default: cbrt, long double: cbrtl)(x)
|
|
|
|
#define ceil(x) \
|
|
_Generic((x), float: ceilf, default: ceil, long double: ceill)(x)
|
|
|
|
#define copysign(x, y) \
|
|
_Generic((x), float: copysignf, default: copysign, long double: copysignl)( \
|
|
x, y)
|
|
|
|
#define erf(x) _Generic((x), float: erff, default: erf, long double: erfl)(x)
|
|
|
|
#define erfc(x) \
|
|
_Generic((x), float: erfcf, default: erfc, long double: erfcl)(x)
|
|
|
|
#define exp2(x) \
|
|
_Generic((x), float: exp2f, default: exp2, long double: exp2l)(x)
|
|
|
|
#define expm1(x) \
|
|
_Generic((x), float: expm1f, default: expm1, long double: expm1l)(x)
|
|
|
|
#define fdim(x, y) \
|
|
_Generic((x), float: fdimf, default: fdim, long double: fdiml)(x, y)
|
|
|
|
#define floor(x) \
|
|
_Generic((x), float: floorf, default: floor, long double: floorl)(x)
|
|
|
|
#define fma(x, y, z) \
|
|
_Generic((x), float: fmaf, default: fma, long double: fmal)(x, y, z)
|
|
|
|
#define fmax(x, y) \
|
|
_Generic((x), float: fmaxf, default: fmax, long double: fmaxl)(x, y)
|
|
|
|
#define fmin(x, y) \
|
|
_Generic((x), float: fminf, default: fmin, long double: fminl)(x, y)
|
|
|
|
#define fmod(x, y) \
|
|
_Generic((x), float: fmodf, default: fmod, long double: fmodl)(x, y)
|
|
|
|
#define frexp(x, y) \
|
|
_Generic((x), float: frexpf, default: frexp, long double: frexpl)(x, y)
|
|
|
|
#define hypot(x, y) \
|
|
_Generic((x), float: hypotf, default: hypot, long double: hypotl)(x, y)
|
|
|
|
#define ilogb(x) \
|
|
_Generic((x), float: ilogbf, default: ilogb, long double: ilogbl)(x)
|
|
|
|
#define ldexp(x, y) \
|
|
_Generic((x), float: ldexpf, default: ldexp, long double: ldexpl)(x, y)
|
|
|
|
#define lgamma(x) \
|
|
_Generic((x), float: lgammaf, default: lgamma, long double: lgammal)(x)
|
|
|
|
#define llrint(x) \
|
|
_Generic((x), float: llrintf, default: llrint, long double: llrintl)(x)
|
|
|
|
#define llround(x) \
|
|
_Generic((x), float: llroundf, default: llround, long double: llroundl)(x)
|
|
|
|
#define log10(x) \
|
|
_Generic((x), float: log10f, default: log10, long double: log10l)(x)
|
|
|
|
#define log1p(x) \
|
|
_Generic((x), float: log1pf, default: log1p, long double: log1pl)(x)
|
|
|
|
#define log2(x) \
|
|
_Generic((x), float: log2f, default: log2, long double: log2l)(x)
|
|
|
|
#define logb(x) \
|
|
_Generic((x), float: logbf, default: logb, long double: logbl)(x)
|
|
|
|
#define lrint(x) \
|
|
_Generic((x), float: lrintf, default: lrint, long double: lrintl)(x)
|
|
|
|
#define lround(x) \
|
|
_Generic((x), float: lroundf, default: lround, long double: lroundl)(x)
|
|
|
|
#define nearbyint(x) \
|
|
_Generic((x), \
|
|
float: nearbyintf, \
|
|
default: nearbyint, \
|
|
long double: nearbyintl)(x)
|
|
|
|
#define nextafter(x, y) \
|
|
_Generic((x), \
|
|
float: nextafterf, \
|
|
default: nextafter, \
|
|
long double: nextafterl)(x, y)
|
|
|
|
#define nexttoward(x, y) \
|
|
_Generic((x), \
|
|
float: nexttowardf, \
|
|
default: nexttoward, \
|
|
long double: nexttowardl)(x, y)
|
|
|
|
#define remainder(x, y) \
|
|
_Generic((x), \
|
|
float: remainderf, \
|
|
default: remainder, \
|
|
long double: remainderl)(x, y)
|
|
|
|
#define remquo(x, y, z) \
|
|
_Generic((x), float: remquof, default: remquo, long double: remquol)(x, y, z)
|
|
|
|
#define rint(x) \
|
|
_Generic((x), float: rintf, default: rint, long double: rintl)(x)
|
|
|
|
#define round(x) \
|
|
_Generic((x), float: roundf, default: round, long double: roundl)(x)
|
|
|
|
#define scalbln(x, y) \
|
|
_Generic((x), float: scalblnf, default: scalbln, long double: scalblnl)(x, y)
|
|
|
|
#define scalbn(x, y) \
|
|
_Generic((x), float: scalbnf, default: scalbn, long double: scalbnl)(x, y)
|
|
|
|
#define tgamma(x) \
|
|
_Generic((x), float: tgammaf, default: tgamma, long double: tgammal)(x)
|
|
|
|
#define trunc(x) \
|
|
_Generic((x), float: truncf, default: trunc, long double: truncl)(x)
|
|
|
|
#define carg(x) \
|
|
_Generic((x), \
|
|
complex float: cargf, \
|
|
default: carg, \
|
|
complex long double: cargl)(x)
|
|
|
|
#define conj(x) \
|
|
_Generic((x), \
|
|
complex float: conjf, \
|
|
default: conj, \
|
|
complex long double: conjl)(x)
|
|
|
|
#undef creal
|
|
#define creal(x) \
|
|
_Generic((x), \
|
|
complex float: crealf, \
|
|
default: creal, \
|
|
complex long double: creall)(x)
|
|
|
|
#undef cimag
|
|
#define cimag(x) \
|
|
_Generic((x), \
|
|
complex float: cimagf, \
|
|
default: cimag, \
|
|
complex long double: cimagl)(x)
|
|
|
|
#define cproj(x) \
|
|
_Generic((x), \
|
|
complex float: cprojf, \
|
|
default: cproj, \
|
|
complex long double: cprojl)(x)
|
|
|
|
#endif /* C11 */
|
|
#endif /* _TGMATH_H */
|