144dd05c3SReid Kleckner #pragma once 244dd05c3SReid Kleckner 3f85ae058SJohannes Doerfert // __clang_cuda_(c)math(.h) also provide `abs` which actually belong in 4f85ae058SJohannes Doerfert // cstdlib. We could split them out but for now we just include cstdlib from 5f85ae058SJohannes Doerfert // cmath.h which is what the systems I've seen do as well. 6f85ae058SJohannes Doerfert #include <stdlib.h> 7f85ae058SJohannes Doerfert 8f85ae058SJohannes Doerfert double fabs(double __a); 9f85ae058SJohannes Doerfert double acos(double __a); 10f85ae058SJohannes Doerfert float acosf(float __a); 11f85ae058SJohannes Doerfert double acosh(double __a); 12f85ae058SJohannes Doerfert float acoshf(float __a); 13f85ae058SJohannes Doerfert double asin(double __a); 14f85ae058SJohannes Doerfert float asinf(float __a); 15f85ae058SJohannes Doerfert double asinh(double __a); 16f85ae058SJohannes Doerfert float asinhf(float __a); 17f85ae058SJohannes Doerfert double atan(double __a); 18f85ae058SJohannes Doerfert double atan2(double __a, double __b); 19f85ae058SJohannes Doerfert float atan2f(float __a, float __b); 20f85ae058SJohannes Doerfert float atanf(float __a); 21f85ae058SJohannes Doerfert double atanh(double __a); 22f85ae058SJohannes Doerfert float atanhf(float __a); 23f85ae058SJohannes Doerfert double cbrt(double __a); 24f85ae058SJohannes Doerfert float cbrtf(float __a); 25f85ae058SJohannes Doerfert double ceil(double __a); 26f85ae058SJohannes Doerfert float ceilf(float __a); 27f85ae058SJohannes Doerfert double copysign(double __a, double __b); 28f85ae058SJohannes Doerfert float copysignf(float __a, float __b); 29f85ae058SJohannes Doerfert double cos(double __a); 30f85ae058SJohannes Doerfert float cosf(float __a); 31f85ae058SJohannes Doerfert double cosh(double __a); 32f85ae058SJohannes Doerfert float coshf(float __a); 33f85ae058SJohannes Doerfert double cospi(double __a); 34f85ae058SJohannes Doerfert float cospif(float __a); 35f85ae058SJohannes Doerfert double cyl_bessel_i0(double __a); 36f85ae058SJohannes Doerfert float cyl_bessel_i0f(float __a); 37f85ae058SJohannes Doerfert double cyl_bessel_i1(double __a); 38f85ae058SJohannes Doerfert float cyl_bessel_i1f(float __a); 39f85ae058SJohannes Doerfert double erf(double __a); 40f85ae058SJohannes Doerfert double erfc(double __a); 41f85ae058SJohannes Doerfert float erfcf(float __a); 42f85ae058SJohannes Doerfert double erfcinv(double __a); 43f85ae058SJohannes Doerfert float erfcinvf(float __a); 44f85ae058SJohannes Doerfert double erfcx(double __a); 45f85ae058SJohannes Doerfert float erfcxf(float __a); 46f85ae058SJohannes Doerfert float erff(float __a); 47f85ae058SJohannes Doerfert double erfinv(double __a); 48f85ae058SJohannes Doerfert float erfinvf(float __a); 49f85ae058SJohannes Doerfert double exp(double __a); 50f85ae058SJohannes Doerfert double exp10(double __a); 51f85ae058SJohannes Doerfert float exp10f(float __a); 52f85ae058SJohannes Doerfert double exp2(double __a); 53f85ae058SJohannes Doerfert float exp2f(float __a); 54f85ae058SJohannes Doerfert float expf(float __a); 55f85ae058SJohannes Doerfert double expm1(double __a); 56f85ae058SJohannes Doerfert float expm1f(float __a); 57f85ae058SJohannes Doerfert float fabsf(float __a); 58f85ae058SJohannes Doerfert double fdim(double __a, double __b); 59f85ae058SJohannes Doerfert float fdimf(float __a, float __b); 60f85ae058SJohannes Doerfert double fdivide(double __a, double __b); 61f85ae058SJohannes Doerfert float fdividef(float __a, float __b); 62f85ae058SJohannes Doerfert double floor(double __f); 63f85ae058SJohannes Doerfert float floorf(float __f); 64f85ae058SJohannes Doerfert double fma(double __a, double __b, double __c); 65f85ae058SJohannes Doerfert float fmaf(float __a, float __b, float __c); 66f85ae058SJohannes Doerfert double fmax(double __a, double __b); 67f85ae058SJohannes Doerfert float fmaxf(float __a, float __b); 68f85ae058SJohannes Doerfert double fmin(double __a, double __b); 69f85ae058SJohannes Doerfert float fminf(float __a, float __b); 70f85ae058SJohannes Doerfert double fmod(double __a, double __b); 71f85ae058SJohannes Doerfert float fmodf(float __a, float __b); 72f85ae058SJohannes Doerfert double frexp(double __a, int *__b); 73f85ae058SJohannes Doerfert float frexpf(float __a, int *__b); 74f85ae058SJohannes Doerfert double hypot(double __a, double __b); 75f85ae058SJohannes Doerfert float hypotf(float __a, float __b); 76f85ae058SJohannes Doerfert int ilogb(double __a); 77f85ae058SJohannes Doerfert int ilogbf(float __a); 78f85ae058SJohannes Doerfert double j0(double __a); 79f85ae058SJohannes Doerfert float j0f(float __a); 80f85ae058SJohannes Doerfert double j1(double __a); 81f85ae058SJohannes Doerfert float j1f(float __a); 82f85ae058SJohannes Doerfert double jn(int __n, double __a); 83f85ae058SJohannes Doerfert float jnf(int __n, float __a); 84f85ae058SJohannes Doerfert double ldexp(double __a, int __b); 85f85ae058SJohannes Doerfert float ldexpf(float __a, int __b); 86f85ae058SJohannes Doerfert double lgamma(double __a); 87f85ae058SJohannes Doerfert float lgammaf(float __a); 88f85ae058SJohannes Doerfert long long llmax(long long __a, long long __b); 89f85ae058SJohannes Doerfert long long llmin(long long __a, long long __b); 90f85ae058SJohannes Doerfert long long llrint(double __a); 91f85ae058SJohannes Doerfert long long llrintf(float __a); 92f85ae058SJohannes Doerfert long long llround(double __a); 93f85ae058SJohannes Doerfert long long llroundf(float __a); 94f85ae058SJohannes Doerfert double log(double __a); 95f85ae058SJohannes Doerfert double log10(double __a); 96f85ae058SJohannes Doerfert float log10f(float __a); 97f85ae058SJohannes Doerfert double log1p(double __a); 98f85ae058SJohannes Doerfert float log1pf(float __a); 99f85ae058SJohannes Doerfert double log2(double __a); 100f85ae058SJohannes Doerfert float log2f(float __a); 101f85ae058SJohannes Doerfert double logb(double __a); 102f85ae058SJohannes Doerfert float logbf(float __a); 103f85ae058SJohannes Doerfert float logf(float __a); 104f85ae058SJohannes Doerfert long lrint(double __a); 105f85ae058SJohannes Doerfert long lrintf(float __a); 106f85ae058SJohannes Doerfert long lround(double __a); 107f85ae058SJohannes Doerfert long lroundf(float __a); 108f85ae058SJohannes Doerfert double modf(double __a, double *__b); 109f85ae058SJohannes Doerfert float modff(float __a, float *__b); 110f85ae058SJohannes Doerfert double nearbyint(double __a); 111f85ae058SJohannes Doerfert float nearbyintf(float __a); 112f85ae058SJohannes Doerfert double nextafter(double __a, double __b); 113f85ae058SJohannes Doerfert float nextafterf(float __a, float __b); 114f85ae058SJohannes Doerfert double norm(int __dim, const double *__t); 115f85ae058SJohannes Doerfert double norm3d(double __a, double __b, double __c); 116f85ae058SJohannes Doerfert float norm3df(float __a, float __b, float __c); 117f85ae058SJohannes Doerfert double norm4d(double __a, double __b, double __c, double __d); 118f85ae058SJohannes Doerfert float norm4df(float __a, float __b, float __c, float __d); 119f85ae058SJohannes Doerfert double normcdf(double __a); 120f85ae058SJohannes Doerfert float normcdff(float __a); 121f85ae058SJohannes Doerfert double normcdfinv(double __a); 122f85ae058SJohannes Doerfert float normcdfinvf(float __a); 123f85ae058SJohannes Doerfert float normf(int __dim, const float *__t); 124f85ae058SJohannes Doerfert double pow(double __a, double __b); 125f85ae058SJohannes Doerfert float powf(float __a, float __b); 126f85ae058SJohannes Doerfert double powi(double __a, int __b); 127f85ae058SJohannes Doerfert float powif(float __a, int __b); 128f85ae058SJohannes Doerfert double rcbrt(double __a); 129f85ae058SJohannes Doerfert float rcbrtf(float __a); 130f85ae058SJohannes Doerfert double remainder(double __a, double __b); 131f85ae058SJohannes Doerfert float remainderf(float __a, float __b); 132f85ae058SJohannes Doerfert double remquo(double __a, double __b, int *__c); 133f85ae058SJohannes Doerfert float remquof(float __a, float __b, int *__c); 134f85ae058SJohannes Doerfert double rhypot(double __a, double __b); 135f85ae058SJohannes Doerfert float rhypotf(float __a, float __b); 136f85ae058SJohannes Doerfert double rint(double __a); 137f85ae058SJohannes Doerfert float rintf(float __a); 138f85ae058SJohannes Doerfert double rnorm(int __a, const double *__b); 139f85ae058SJohannes Doerfert double rnorm3d(double __a, double __b, double __c); 140f85ae058SJohannes Doerfert float rnorm3df(float __a, float __b, float __c); 141f85ae058SJohannes Doerfert double rnorm4d(double __a, double __b, double __c, double __d); 142f85ae058SJohannes Doerfert float rnorm4df(float __a, float __b, float __c, float __d); 143f85ae058SJohannes Doerfert float rnormf(int __dim, const float *__t); 144f85ae058SJohannes Doerfert double round(double __a); 145f85ae058SJohannes Doerfert float roundf(float __a); 146f85ae058SJohannes Doerfert double rsqrt(double __a); 147f85ae058SJohannes Doerfert float rsqrtf(float __a); 148f85ae058SJohannes Doerfert double scalbn(double __a, int __b); 149f85ae058SJohannes Doerfert float scalbnf(float __a, int __b); 150f85ae058SJohannes Doerfert double scalbln(double __a, long __b); 151f85ae058SJohannes Doerfert float scalblnf(float __a, long __b); 152f85ae058SJohannes Doerfert double sin(double __a); 153f85ae058SJohannes Doerfert void sincos(double __a, double *__s, double *__c); 154f85ae058SJohannes Doerfert void sincosf(float __a, float *__s, float *__c); 155f85ae058SJohannes Doerfert void sincospi(double __a, double *__s, double *__c); 156f85ae058SJohannes Doerfert void sincospif(float __a, float *__s, float *__c); 157f85ae058SJohannes Doerfert float sinf(float __a); 158f85ae058SJohannes Doerfert double sinh(double __a); 159f85ae058SJohannes Doerfert float sinhf(float __a); 160f85ae058SJohannes Doerfert double sinpi(double __a); 161f85ae058SJohannes Doerfert float sinpif(float __a); 162f85ae058SJohannes Doerfert double sqrt(double __a); 163f85ae058SJohannes Doerfert float sqrtf(float __a); 164f85ae058SJohannes Doerfert double tan(double __a); 165f85ae058SJohannes Doerfert float tanf(float __a); 166f85ae058SJohannes Doerfert double tanh(double __a); 167f85ae058SJohannes Doerfert float tanhf(float __a); 168f85ae058SJohannes Doerfert double tgamma(double __a); 169f85ae058SJohannes Doerfert float tgammaf(float __a); 170f85ae058SJohannes Doerfert double trunc(double __a); 171f85ae058SJohannes Doerfert float truncf(float __a); 172f85ae058SJohannes Doerfert unsigned long long ullmax(unsigned long long __a, 173f85ae058SJohannes Doerfert unsigned long long __b); 174f85ae058SJohannes Doerfert unsigned long long ullmin(unsigned long long __a, 175f85ae058SJohannes Doerfert unsigned long long __b); 176f85ae058SJohannes Doerfert unsigned int umax(unsigned int __a, unsigned int __b); 177f85ae058SJohannes Doerfert unsigned int umin(unsigned int __a, unsigned int __b); 178f85ae058SJohannes Doerfert double y0(double __a); 179f85ae058SJohannes Doerfert float y0f(float __a); 180f85ae058SJohannes Doerfert double y1(double __a); 181f85ae058SJohannes Doerfert float y1f(float __a); 182f85ae058SJohannes Doerfert double yn(int __a, double __b); 183f85ae058SJohannes Doerfert float ynf(int __a, float __b); 184f85ae058SJohannes Doerfert 185f85ae058SJohannes Doerfert /** 186f85ae058SJohannes Doerfert * A positive float constant expression. HUGE_VALF evaluates 187f85ae058SJohannes Doerfert * to +infinity. Used as an error value returned by the built-in 188f85ae058SJohannes Doerfert * math functions. 189f85ae058SJohannes Doerfert */ 190f85ae058SJohannes Doerfert #define HUGE_VALF (__builtin_huge_valf()) 191f85ae058SJohannes Doerfert 192f85ae058SJohannes Doerfert /** 193f85ae058SJohannes Doerfert * A positive double constant expression. HUGE_VAL evaluates 194f85ae058SJohannes Doerfert * to +infinity. Used as an error value returned by the built-in 195f85ae058SJohannes Doerfert * math functions. 196f85ae058SJohannes Doerfert */ 197f85ae058SJohannes Doerfert #define HUGE_VAL (__builtin_huge_val()) 198*17d83342SJohannes Doerfert 199*17d83342SJohannes Doerfert #ifdef __cplusplus 200*17d83342SJohannes Doerfert #include <cmath> 201*17d83342SJohannes Doerfert #endif 202