1*394db10aSriastradh /* $NetBSD: math.h,v 1.72 2024/09/09 15:06:29 riastradh Exp $ */ 24d2cbfceScgd 361f28255Scgd /* 4f3a958aeSjtc * ==================================================== 5f3a958aeSjtc * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 661f28255Scgd * 7f3a958aeSjtc * Developed at SunPro, a Sun Microsystems, Inc. business. 8f3a958aeSjtc * Permission to use, copy, modify, and distribute this 9f3a958aeSjtc * software is freely granted, provided that this notice 10f3a958aeSjtc * is preserved. 11f3a958aeSjtc * ==================================================== 12f3a958aeSjtc */ 13f3a958aeSjtc 14f3a958aeSjtc /* 154d2cbfceScgd * @(#)fdlibm.h 5.1 93/09/24 1661f28255Scgd */ 1761f28255Scgd 1861f28255Scgd #ifndef _MATH_H_ 19358113c8Scgd #define _MATH_H_ 2061f28255Scgd 21693059feSkleink #include <sys/cdefs.h> 22ac3781ecSkleink #include <sys/featuretest.h> 232d8577fbSsimonb 242d8577fbSsimonb union __float_u { 252d8577fbSsimonb unsigned char __dummy[sizeof(float)]; 262d8577fbSsimonb float __val; 272d8577fbSsimonb }; 282d8577fbSsimonb 292d8577fbSsimonb union __double_u { 302d8577fbSsimonb unsigned char __dummy[sizeof(double)]; 312d8577fbSsimonb double __val; 322d8577fbSsimonb }; 332d8577fbSsimonb 3420011174Sthorpej union __long_double_u { 3520011174Sthorpej unsigned char __dummy[sizeof(long double)]; 3620011174Sthorpej long double __val; 3720011174Sthorpej }; 3820011174Sthorpej 3920011174Sthorpej #include <machine/math.h> /* may use __float_u, __double_u, 4020011174Sthorpej or __long_double_u */ 4105393fd8Smatt #include <limits.h> /* for INT_{MIN,MAX} */ 42ac3781ecSkleink 4346533116Sjoerg #if (!defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \ 4446533116Sjoerg !defined(_XOPEN_SOURCE)) || ((_POSIX_C_SOURCE - 0) >= 200809L || \ 4546533116Sjoerg defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) >= 199901L || \ 4646533116Sjoerg (__cplusplus - 0) >= 201103L || defined(_NETBSD_SOURCE)) 4746533116Sjoerg #define __MATH_C99_FEATURES 4846533116Sjoerg #endif 4946533116Sjoerg 5046533116Sjoerg #ifdef __MATH_C99_FEATURES 51386426deSjoerg # if defined(__FLT_EVAL_METHOD__) && (__FLT_EVAL_METHOD__ - 0) == 0 52386426deSjoerg typedef double double_t; 53386426deSjoerg typedef float float_t; 54386426deSjoerg # elif (__FLT_EVAL_METHOD__ - 0) == 1 55386426deSjoerg typedef double double_t; 56386426deSjoerg typedef double float_t; 57386426deSjoerg # elif (__FLT_EVAL_METHOD__ - 0) == 2 58386426deSjoerg typedef long double double_t; 59386426deSjoerg typedef long double float_t; 60386426deSjoerg # endif 61386426deSjoerg #endif 62386426deSjoerg 63d82e7323Skleink #ifdef __HAVE_LONG_DOUBLE 64d82e7323Skleink #define __fpmacro_unary_floating(__name, __arg0) \ 65642c4f3fSkleink /* LINTED */ \ 66d82e7323Skleink ((sizeof (__arg0) == sizeof (float)) \ 67d82e7323Skleink ? __ ## __name ## f (__arg0) \ 68d82e7323Skleink : (sizeof (__arg0) == sizeof (double)) \ 69d82e7323Skleink ? __ ## __name ## d (__arg0) \ 70d82e7323Skleink : __ ## __name ## l (__arg0)) 71d82e7323Skleink #else 72d82e7323Skleink #define __fpmacro_unary_floating(__name, __arg0) \ 73642c4f3fSkleink /* LINTED */ \ 74d82e7323Skleink ((sizeof (__arg0) == sizeof (float)) \ 75d82e7323Skleink ? __ ## __name ## f (__arg0) \ 76d82e7323Skleink : __ ## __name ## d (__arg0)) 7711b19038Suwe #endif /* __HAVE_LONG_DOUBLE */ 78d82e7323Skleink 7961f28255Scgd /* 80f3a958aeSjtc * ANSI/POSIX 8161f28255Scgd */ 82793c5013Skleink /* 7.12#3 HUGE_VAL, HUGELF, HUGE_VALL */ 83839c0958Sjoerg #if __GNUC_PREREQ__(3, 3) 84839c0958Sjoerg #define HUGE_VAL __builtin_huge_val() 85839c0958Sjoerg #else 86a2cd7322Sperry extern const union __double_u __infinity; 872d8577fbSsimonb #define HUGE_VAL __infinity.__val 88839c0958Sjoerg #endif 892d8577fbSsimonb 902d8577fbSsimonb /* 912d8577fbSsimonb * ISO C99 922d8577fbSsimonb */ 9346533116Sjoerg #if defined(__MATH_C99_FEATURES) || \ 9446533116Sjoerg (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 600 95793c5013Skleink /* 7.12#3 HUGE_VAL, HUGELF, HUGE_VALL */ 96839c0958Sjoerg #if __GNUC_PREREQ__(3, 3) 97839c0958Sjoerg #define HUGE_VALF __builtin_huge_valf() 98839c0958Sjoerg #define HUGE_VALL __builtin_huge_vall() 99839c0958Sjoerg #else 100a2cd7322Sperry extern const union __float_u __infinityf; 101adb0aadaSkleink #define HUGE_VALF __infinityf.__val 102adb0aadaSkleink 103a2cd7322Sperry extern const union __long_double_u __infinityl; 104adb0aadaSkleink #define HUGE_VALL __infinityl.__val 105839c0958Sjoerg #endif 106adb0aadaSkleink 107793c5013Skleink /* 7.12#4 INFINITY */ 108a99c34e9Smatt #if defined(__INFINITY) 109793c5013Skleink #define INFINITY __INFINITY /* float constant which overflows */ 110a99c34e9Smatt #elif __GNUC_PREREQ__(3, 3) 111a99c34e9Smatt #define INFINITY __builtin_inff() 112793c5013Skleink #else 113793c5013Skleink #define INFINITY HUGE_VALF /* positive infinity */ 114793c5013Skleink #endif /* __INFINITY */ 115793c5013Skleink 116793c5013Skleink /* 7.12#5 NAN: a quiet NaN, if supported */ 117adb0aadaSkleink #ifdef __HAVE_NANF 118c79c3eedSmartin #if __GNUC_PREREQ__(3,3) 119c79c3eedSmartin #define NAN __builtin_nanf("") 120c79c3eedSmartin #else 121a2cd7322Sperry extern const union __float_u __nanf; 1222d8577fbSsimonb #define NAN __nanf.__val 123c79c3eedSmartin #endif 124adb0aadaSkleink #endif /* __HAVE_NANF */ 125d82e7323Skleink 126d82e7323Skleink /* 7.12#6 number classification macros */ 127d82e7323Skleink #define FP_INFINITE 0x00 128d82e7323Skleink #define FP_NAN 0x01 129d82e7323Skleink #define FP_NORMAL 0x02 130d82e7323Skleink #define FP_SUBNORMAL 0x03 131d82e7323Skleink #define FP_ZERO 0x04 132d82e7323Skleink /* NetBSD extensions */ 133d82e7323Skleink #define _FP_LOMD 0x80 /* range for machine-specific classes */ 134d82e7323Skleink #define _FP_HIMD 0xff 135d82e7323Skleink 136fb1f0eb5Sriastradh /* 7.12#7 fast fma(3) feature test macros */ 137fb1f0eb5Sriastradh #if __GNUC_PREREQ__(4, 4) 138fb1f0eb5Sriastradh # ifdef __FP_FAST_FMA 139fb1f0eb5Sriastradh # define FP_FAST_FMA 1 140fb1f0eb5Sriastradh # endif 141fb1f0eb5Sriastradh # ifdef __FP_FAST_FMAF 142fb1f0eb5Sriastradh # define FP_FAST_FMAF 1 143fb1f0eb5Sriastradh # endif 144fb1f0eb5Sriastradh # ifdef __FP_FAST_FMAL 145fb1f0eb5Sriastradh # define FP_FAST_FMAL 1 146fb1f0eb5Sriastradh # endif 147fb1f0eb5Sriastradh #endif 148fb1f0eb5Sriastradh 149fb1f0eb5Sriastradh /* 7.12#8 ilogb exceptional input result value macros */ 15005393fd8Smatt #define FP_ILOGB0 INT_MIN 151aa951aadSmatt #define FP_ILOGBNAN INT_MAX 15205393fd8Smatt 153*394db10aSriastradh /* 7.12#9 error handling (__math_errhandling from machine/math.h) */ 154*394db10aSriastradh #define MATH_ERRNO 1 155*394db10aSriastradh #define MATH_ERREXCEPT 2 156*394db10aSriastradh #ifdef __vax__ /* XXX !__HAVE_FENV */ 157*394db10aSriastradh #define math_errhandling MATH_ERRNO 158*394db10aSriastradh #else 159*394db10aSriastradh #define math_errhandling MATH_ERREXCEPT 160*394db10aSriastradh #endif 161*394db10aSriastradh 16246533116Sjoerg #endif /* C99 || _XOPEN_SOURCE >= 600 */ 16361f28255Scgd 164f3a958aeSjtc /* 165f3a958aeSjtc * XOPEN/SVID 166f3a958aeSjtc */ 1674be7a2dcSbjh21 #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) 16861f28255Scgd #define M_E 2.7182818284590452354 /* e */ 16961f28255Scgd #define M_LOG2E 1.4426950408889634074 /* log 2e */ 17061f28255Scgd #define M_LOG10E 0.43429448190325182765 /* log 10e */ 17161f28255Scgd #define M_LN2 0.69314718055994530942 /* log e2 */ 17261f28255Scgd #define M_LN10 2.30258509299404568402 /* log e10 */ 17361f28255Scgd #define M_PI 3.14159265358979323846 /* pi */ 17461f28255Scgd #define M_PI_2 1.57079632679489661923 /* pi/2 */ 17561f28255Scgd #define M_PI_4 0.78539816339744830962 /* pi/4 */ 17661f28255Scgd #define M_1_PI 0.31830988618379067154 /* 1/pi */ 17761f28255Scgd #define M_2_PI 0.63661977236758134308 /* 2/pi */ 17861f28255Scgd #define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ 17961f28255Scgd #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ 18061f28255Scgd #define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ 181f3a958aeSjtc 182f3a958aeSjtc #define MAXFLOAT ((float)3.40282346638528860e+38) 183f3a958aeSjtc extern int signgam; 1844be7a2dcSbjh21 #endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */ 185f3a958aeSjtc 1864be7a2dcSbjh21 #if defined(_NETBSD_SOURCE) 187f3a958aeSjtc enum fdversion {fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix}; 188f3a958aeSjtc 189f3a958aeSjtc #define _LIB_VERSION_TYPE enum fdversion 190f3a958aeSjtc #define _LIB_VERSION _fdlib_version 191f3a958aeSjtc 192f3a958aeSjtc /* if global variable _LIB_VERSION is not desirable, one may 193f3a958aeSjtc * change the following to be a constant by: 194f3a958aeSjtc * #define _LIB_VERSION_TYPE const enum version 195f3a958aeSjtc * In that case, after one initializes the value _LIB_VERSION (see 196f3a958aeSjtc * s_lib_version.c) during compile time, it cannot be modified 197f3a958aeSjtc * in the middle of a program 198f3a958aeSjtc */ 199f3a958aeSjtc extern _LIB_VERSION_TYPE _LIB_VERSION; 200f3a958aeSjtc 201f3a958aeSjtc #define _IEEE_ fdlibm_ieee 202f3a958aeSjtc #define _SVID_ fdlibm_svid 203f3a958aeSjtc #define _XOPEN_ fdlibm_xopen 204f3a958aeSjtc #define _POSIX_ fdlibm_posix 205f3a958aeSjtc 20612c753dbStv #ifndef __cplusplus 207f3a958aeSjtc struct exception { 208f3a958aeSjtc int type; 209bd1ba72fSchristos const char *name; 210f3a958aeSjtc double arg1; 211f3a958aeSjtc double arg2; 212f3a958aeSjtc double retval; 213f3a958aeSjtc }; 21412c753dbStv #endif 215f3a958aeSjtc 216f3a958aeSjtc #define HUGE MAXFLOAT 217f3a958aeSjtc 218f3a958aeSjtc /* 219f3a958aeSjtc * set X_TLOSS = pi*2**52, which is possibly defined in <values.h> 220f3a958aeSjtc * (one may replace the following line by "#include <values.h>") 221f3a958aeSjtc */ 222f3a958aeSjtc 223f3a958aeSjtc #define X_TLOSS 1.41484755040568800000e+16 224f3a958aeSjtc 225f3a958aeSjtc #define DOMAIN 1 226f3a958aeSjtc #define SING 2 227f3a958aeSjtc #define OVERFLOW 3 228f3a958aeSjtc #define UNDERFLOW 4 229f3a958aeSjtc #define TLOSS 5 230f3a958aeSjtc #define PLOSS 6 231f3a958aeSjtc 2324be7a2dcSbjh21 #endif /* _NETBSD_SOURCE */ 23361f28255Scgd 23461f28255Scgd __BEGIN_DECLS 235f3a958aeSjtc /* 236f3a958aeSjtc * ANSI/POSIX 237f3a958aeSjtc */ 23819b7469aSperry double acos(double); 23919b7469aSperry double asin(double); 24019b7469aSperry double atan(double); 24119b7469aSperry double atan2(double, double); 24219b7469aSperry double cos(double); 24319b7469aSperry double sin(double); 24419b7469aSperry double tan(double); 245f3a958aeSjtc 24619b7469aSperry double cosh(double); 24719b7469aSperry double sinh(double); 24819b7469aSperry double tanh(double); 249f3a958aeSjtc 25019b7469aSperry double exp(double); 2515f7c431eSchristos double exp2(double); 25219b7469aSperry double frexp(double, int *); 25319b7469aSperry double ldexp(double, int); 25419b7469aSperry double log(double); 2551f356457Schristos double log2(double); 25619b7469aSperry double log10(double); 25719b7469aSperry double modf(double, double *); 258f3a958aeSjtc 25919b7469aSperry double pow(double, double); 26019b7469aSperry double sqrt(double); 261f3a958aeSjtc 26219b7469aSperry double ceil(double); 26319b7469aSperry double fabs(double); 26419b7469aSperry double floor(double); 26519b7469aSperry double fmod(double, double); 26661f28255Scgd 26746533116Sjoerg #if defined(__MATH_C99_FEATURES) || defined(_XOPEN_SOURCE) 26819b7469aSperry double erf(double); 26919b7469aSperry double erfc(double); 27019b7469aSperry double hypot(double, double); 27146533116Sjoerg #endif 27246533116Sjoerg 27346533116Sjoerg #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) 27419b7469aSperry int finite(double); 27546533116Sjoerg double gamma(double); 27619b7469aSperry double j0(double); 27719b7469aSperry double j1(double); 27819b7469aSperry double jn(int, double); 27919b7469aSperry double y0(double); 28019b7469aSperry double y1(double); 28119b7469aSperry double yn(int, double); 282f3a958aeSjtc 2834be7a2dcSbjh21 #if (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE) 284f0907ab5Schristos double scalb(double, double); 285f0907ab5Schristos #endif /* (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)*/ 286f0907ab5Schristos #endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */ 287f0907ab5Schristos 288f0907ab5Schristos /* 289f0907ab5Schristos * ISO C99 290f0907ab5Schristos */ 29146533116Sjoerg #if defined(__MATH_C99_FEATURES) || (_XOPEN_SOURCE - 0) >= 500 29219b7469aSperry double acosh(double); 29319b7469aSperry double asinh(double); 29419b7469aSperry double atanh(double); 29519b7469aSperry double cbrt(double); 29619b7469aSperry double expm1(double); 29719b7469aSperry int ilogb(double); 29819b7469aSperry double log1p(double); 29919b7469aSperry double logb(double); 30019b7469aSperry double nextafter(double, double); 30119b7469aSperry double remainder(double, double); 302f0907ab5Schristos double rint(double); 303f0907ab5Schristos #endif 304f3a958aeSjtc 30546533116Sjoerg #if defined(__MATH_C99_FEATURES) || (_XOPEN_SOURCE - 0) >= 600 || \ 30646533116Sjoerg (_POSIX_C_SOURCE - 0) >= 200112L 307d82e7323Skleink /* 7.12.3.1 int fpclassify(real-floating x) */ 308d82e7323Skleink #define fpclassify(__x) __fpmacro_unary_floating(fpclassify, __x) 309d82e7323Skleink 310d82e7323Skleink /* 7.12.3.2 int isfinite(real-floating x) */ 311d82e7323Skleink #define isfinite(__x) __fpmacro_unary_floating(isfinite, __x) 312d82e7323Skleink 313d82e7323Skleink /* 7.12.3.5 int isnormal(real-floating x) */ 314d82e7323Skleink #define isnormal(__x) (fpclassify(__x) == FP_NORMAL) 315d82e7323Skleink 316d82e7323Skleink /* 7.12.3.6 int signbit(real-floating x) */ 317d82e7323Skleink #define signbit(__x) __fpmacro_unary_floating(signbit, __x) 318d82e7323Skleink 319737ab05bSdrochner /* 7.12.4 trigonometric */ 320737ab05bSdrochner 32119b7469aSperry float acosf(float); 32219b7469aSperry float asinf(float); 32319b7469aSperry float atanf(float); 32419b7469aSperry float atan2f(float, float); 32519b7469aSperry float cosf(float); 32619b7469aSperry float sinf(float); 32719b7469aSperry float tanf(float); 328737ab05bSdrochner 3291ab62a3aSmatt long double acosl(long double); 3301ab62a3aSmatt long double asinl(long double); 3311ab62a3aSmatt long double atanl(long double); 3321ab62a3aSmatt long double atan2l(long double, long double); 3331ab62a3aSmatt long double cosl(long double); 3341ab62a3aSmatt long double sinl(long double); 3351ab62a3aSmatt long double tanl(long double); 3361ab62a3aSmatt 337737ab05bSdrochner /* 7.12.5 hyperbolic */ 338737ab05bSdrochner 33919b7469aSperry float acoshf(float); 34019b7469aSperry float asinhf(float); 34119b7469aSperry float atanhf(float); 34219b7469aSperry float coshf(float); 34319b7469aSperry float sinhf(float); 34419b7469aSperry float tanhf(float); 3451ab62a3aSmatt long double acoshl(long double); 3461ab62a3aSmatt long double asinhl(long double); 3471ab62a3aSmatt long double atanhl(long double); 3481ab62a3aSmatt long double coshl(long double); 3491ab62a3aSmatt long double sinhl(long double); 3501ab62a3aSmatt long double tanhl(long double); 351737ab05bSdrochner 352737ab05bSdrochner /* 7.12.6 exp / log */ 35346533116Sjoerg double scalbn(double, int); 35446533116Sjoerg double scalbln(double, long); 355737ab05bSdrochner 35619b7469aSperry float expf(float); 3575f7c431eSchristos float exp2f(float); 35819b7469aSperry float expm1f(float); 35919b7469aSperry float frexpf(float, int *); 36019b7469aSperry int ilogbf(float); 36119b7469aSperry float ldexpf(float, int); 36219b7469aSperry float logf(float); 3631f356457Schristos float log2f(float); 36419b7469aSperry float log10f(float); 36519b7469aSperry float log1pf(float); 36619b7469aSperry float logbf(float); 36719b7469aSperry float modff(float, float *); 36819b7469aSperry float scalbnf(float, int); 3691ab62a3aSmatt float scalblnf(float, long); 3701ab62a3aSmatt 3711ab62a3aSmatt long double expl(long double); 3721ab62a3aSmatt long double exp2l(long double); 3731ab62a3aSmatt long double expm1l(long double); 3741ab62a3aSmatt long double frexpl(long double, int *); 3751ab62a3aSmatt int ilogbl(long double); 3761ab62a3aSmatt long double ldexpl(long double, int); 3771ab62a3aSmatt long double logl(long double); 3781ab62a3aSmatt long double log2l(long double); 3791ab62a3aSmatt long double log10l(long double); 3801ab62a3aSmatt long double log1pl(long double); 3811ab62a3aSmatt long double logbl(long double); 3821ab62a3aSmatt long double modfl(long double, long double *); 3831ab62a3aSmatt long double scalbnl(long double, int); 3841ab62a3aSmatt long double scalblnl(long double, long); 3851ab62a3aSmatt 386737ab05bSdrochner 387737ab05bSdrochner /* 7.12.7 power / absolute */ 388737ab05bSdrochner 38919b7469aSperry float cbrtf(float); 39019b7469aSperry float fabsf(float); 39119b7469aSperry float hypotf(float, float); 39219b7469aSperry float powf(float, float); 39319b7469aSperry float sqrtf(float); 3941ab62a3aSmatt long double cbrtl(long double); 3951ab62a3aSmatt long double fabsl(long double); 3961ab62a3aSmatt long double hypotl(long double, long double); 3971ab62a3aSmatt long double powl(long double, long double); 3981ab62a3aSmatt long double sqrtl(long double); 399737ab05bSdrochner 400737ab05bSdrochner /* 7.12.8 error / gamma */ 401737ab05bSdrochner 40246533116Sjoerg double lgamma(double); 4031ab62a3aSmatt double tgamma(double); 40419b7469aSperry float erff(float); 40519b7469aSperry float erfcf(float); 40619b7469aSperry float lgammaf(float); 407ba12b0dcSchristos float tgammaf(float); 4081ab62a3aSmatt long double erfl(long double); 4091ab62a3aSmatt long double erfcl(long double); 4101ab62a3aSmatt long double lgammal(long double); 4111ab62a3aSmatt long double tgammal(long double); 412737ab05bSdrochner 413737ab05bSdrochner /* 7.12.9 nearest integer */ 414f0907ab5Schristos 415b6fcfe53Sdrochner /* LONGLONG */ 41619b7469aSperry long long int llrint(double); 41719b7469aSperry long int lround(double); 418147d852dSdrochner /* LONGLONG */ 41919b7469aSperry long long int llround(double); 4201ab62a3aSmatt long int lrint(double); 4211ab62a3aSmatt double round(double); 4221ab62a3aSmatt double trunc(double); 4231ab62a3aSmatt 4241ab62a3aSmatt float ceilf(float); 4251ab62a3aSmatt float floorf(float); 4261ab62a3aSmatt /* LONGLONG */ 4271ab62a3aSmatt long long int llrintf(float); 4281ab62a3aSmatt long int lroundf(float); 429147d852dSdrochner /* LONGLONG */ 43019b7469aSperry long long int llroundf(float); 4311ab62a3aSmatt long int lrintf(float); 4321ab62a3aSmatt float rintf(float); 4331ab62a3aSmatt float roundf(float); 4341ab62a3aSmatt float truncf(float); 4351ab62a3aSmatt long double ceill(long double); 4361ab62a3aSmatt long double floorl(long double); 4371ab62a3aSmatt /* LONGLONG */ 4381ab62a3aSmatt long long int llrintl(long double); 4391ab62a3aSmatt long int lroundl(long double); 4401ab62a3aSmatt /* LONGLONG */ 4411ab62a3aSmatt long long int llroundl(long double); 4421ab62a3aSmatt long int lrintl(long double); 4431ab62a3aSmatt long double rintl(long double); 4441ab62a3aSmatt long double roundl(long double); 4451ab62a3aSmatt long double truncl(long double); 446737ab05bSdrochner 447737ab05bSdrochner /* 7.12.10 remainder */ 448737ab05bSdrochner 44919b7469aSperry float fmodf(float, float); 45019b7469aSperry float remainderf(float, float); 4511ab62a3aSmatt long double fmodl(long double, long double); 4521ab62a3aSmatt long double remainderl(long double, long double); 453737ab05bSdrochner 454e60f59b9Schristos /* 7.12.10.3 The remquo functions */ 455e60f59b9Schristos double remquo(double, double, int *); 456e60f59b9Schristos float remquof(float, float, int *); 4571ab62a3aSmatt long double remquol(long double, long double, int *); 458e60f59b9Schristos 459a981c4ebSdrochner /* 7.12.11 manipulation */ 460737ab05bSdrochner 46146533116Sjoerg double copysign(double, double); 462d66de2dfSkleink double nan(const char *); 4631ab62a3aSmatt double nearbyint(double); 464e2a86dd3Schristos double nexttoward(double, long double); 4651ab62a3aSmatt float copysignf(float, float); 4661ab62a3aSmatt float nanf(const char *); 4671ab62a3aSmatt float nearbyintf(float); 4681ab62a3aSmatt float nextafterf(float, float); 4691ab62a3aSmatt float nexttowardf(float, long double); 4701ab62a3aSmatt long double copysignl(long double, long double); 4711ab62a3aSmatt long double nanl(const char *); 4721ab62a3aSmatt long double nearbyintl(long double); 4731ab62a3aSmatt long double nextafterl(long double, long double); 4741ab62a3aSmatt long double nexttowardl(long double, long double); 475737ab05bSdrochner 476f6e199adSdholland /* 7.12.14 comparison */ 477a981c4ebSdrochner 478a981c4ebSdrochner #define isunordered(x, y) (isnan(x) || isnan(y)) 479a981c4ebSdrochner #define isgreater(x, y) (!isunordered((x), (y)) && (x) > (y)) 480a981c4ebSdrochner #define isgreaterequal(x, y) (!isunordered((x), (y)) && (x) >= (y)) 481a981c4ebSdrochner #define isless(x, y) (!isunordered((x), (y)) && (x) < (y)) 482a981c4ebSdrochner #define islessequal(x, y) (!isunordered((x), (y)) && (x) <= (y)) 483a981c4ebSdrochner #define islessgreater(x, y) (!isunordered((x), (y)) && \ 484a981c4ebSdrochner ((x) > (y) || (y) > (x))) 4851799d3c9Schristos double fdim(double, double); 4861ab62a3aSmatt double fma(double, double, double); 4871799d3c9Schristos double fmax(double, double); 4881799d3c9Schristos double fmin(double, double); 4891799d3c9Schristos float fdimf(float, float); 4901ab62a3aSmatt float fmaf(float, float, float); 4911799d3c9Schristos float fmaxf(float, float); 4921799d3c9Schristos float fminf(float, float); 4931799d3c9Schristos long double fdiml(long double, long double); 4941ab62a3aSmatt long double fmal(long double, long double, long double); 4951799d3c9Schristos long double fmaxl(long double, long double); 4961799d3c9Schristos long double fminl(long double, long double); 497737ab05bSdrochner 498d82e7323Skleink #endif /* !_ANSI_SOURCE && ... */ 499d82e7323Skleink 50046533116Sjoerg #if defined(__MATH_C99_FEATURES) || (_POSIX_C_SOURCE - 0) >= 200112L 5018e54f10bSkleink /* 7.12.3.3 int isinf(real-floating x) */ 502cc4812f3Smartin #if defined(__isinf) || defined(__HAVE_INLINE___ISINF) 5038e54f10bSkleink #define isinf(__x) __isinf(__x) 5048e54f10bSkleink #else 5058e54f10bSkleink #define isinf(__x) __fpmacro_unary_floating(isinf, __x) 5068e54f10bSkleink #endif 5078e54f10bSkleink 5088e54f10bSkleink /* 7.12.3.4 int isnan(real-floating x) */ 509cc4812f3Smartin #if defined(__isnan) || defined(__HAVE_INLINE___ISNAN) 5108e54f10bSkleink #define isnan(__x) __isnan(__x) 5118e54f10bSkleink #else 5128e54f10bSkleink #define isnan(__x) __fpmacro_unary_floating(isnan, __x) 5138e54f10bSkleink #endif 5148e54f10bSkleink #endif /* !_ANSI_SOURCE && ... */ 5158e54f10bSkleink 5164be7a2dcSbjh21 #if defined(_NETBSD_SOURCE) 517af6c922cSriastradh 51812c753dbStv #ifndef __cplusplus 51919b7469aSperry int matherr(struct exception *); 52012c753dbStv #endif 521f3a958aeSjtc 522f3a958aeSjtc /* 523f3a958aeSjtc * IEEE Test Vector 524f3a958aeSjtc */ 52519b7469aSperry double significand(double); 526f3a958aeSjtc 527f3a958aeSjtc /* 528f3a958aeSjtc * BSD math library entry points 529f3a958aeSjtc */ 53019b7469aSperry double drem(double, double); 531f3a958aeSjtc 532af6c922cSriastradh void sincos(double, double *, double *); 533af6c922cSriastradh void sincosf(float, float *, float *); 534af6c922cSriastradh void sincosl(long double, long double *, long double *); 535af6c922cSriastradh 536af6c922cSriastradh double cospi(double); 537af6c922cSriastradh float cospif(float); 538af6c922cSriastradh long double cospil(long double); 539af6c922cSriastradh 540af6c922cSriastradh double sinpi(double); 541af6c922cSriastradh float sinpif(float); 542af6c922cSriastradh long double sinpil(long double); 543af6c922cSriastradh 544af6c922cSriastradh double tanpi(double); 545af6c922cSriastradh float tanpif(float); 546af6c922cSriastradh long double tanpil(long double); 547af6c922cSriastradh 5484be7a2dcSbjh21 #endif /* _NETBSD_SOURCE */ 549ac3781ecSkleink 5504be7a2dcSbjh21 #if defined(_NETBSD_SOURCE) || defined(_REENTRANT) 551f3a958aeSjtc /* 552f3a958aeSjtc * Reentrant version of gamma & lgamma; passes signgam back by reference 553f3a958aeSjtc * as the second argument; user must allocate space for signgam. 554f3a958aeSjtc */ 55519b7469aSperry double gamma_r(double, int *); 55619b7469aSperry double lgamma_r(double, int *); 557af6c922cSriastradh long double lgammal_r(long double, int *); 5584be7a2dcSbjh21 #endif /* _NETBSD_SOURCE || _REENTRANT */ 559b6e27e87Sjtc 5604be7a2dcSbjh21 #if defined(_NETBSD_SOURCE) 56102a4a210Skleink 562b6e27e87Sjtc /* float versions of ANSI/POSIX functions */ 563b6e27e87Sjtc 56419b7469aSperry float gammaf(float); 56519b7469aSperry int isinff(float); 56619b7469aSperry int isnanf(float); 56719b7469aSperry int finitef(float); 56819b7469aSperry float j0f(float); 56919b7469aSperry float j1f(float); 57019b7469aSperry float jnf(int, float); 57119b7469aSperry float y0f(float); 57219b7469aSperry float y1f(float); 57319b7469aSperry float ynf(int, float); 574b6e27e87Sjtc 57519b7469aSperry float scalbf(float, float); 576b6e27e87Sjtc 577b6e27e87Sjtc /* 578b6e27e87Sjtc * float version of IEEE Test Vector 579b6e27e87Sjtc */ 58019b7469aSperry float significandf(float); 581b6e27e87Sjtc 582b6e27e87Sjtc /* 583b6e27e87Sjtc * float versions of BSD math library entry points 584b6e27e87Sjtc */ 58519b7469aSperry float dremf(float, float); 5864be7a2dcSbjh21 #endif /* _NETBSD_SOURCE */ 587b6e27e87Sjtc 5884be7a2dcSbjh21 #if defined(_NETBSD_SOURCE) || defined(_REENTRANT) 589b6e27e87Sjtc /* 590b6e27e87Sjtc * Float versions of reentrant version of gamma & lgamma; passes 591b6e27e87Sjtc * signgam back by reference as the second argument; user must 592b6e27e87Sjtc * allocate space for signgam. 593b6e27e87Sjtc */ 59419b7469aSperry float gammaf_r(float, int *); 59519b7469aSperry float lgammaf_r(float, int *); 596ac3781ecSkleink #endif /* !... || _REENTRANT */ 597b6e27e87Sjtc 598d82e7323Skleink /* 599d82e7323Skleink * Library implementation 600d82e7323Skleink */ 60119b7469aSperry int __fpclassifyf(float); 60219b7469aSperry int __fpclassifyd(double); 60319b7469aSperry int __isfinitef(float); 60419b7469aSperry int __isfinited(double); 60519b7469aSperry int __isinff(float); 60619b7469aSperry int __isinfd(double); 60719b7469aSperry int __isnanf(float); 60819b7469aSperry int __isnand(double); 60919b7469aSperry int __signbitf(float); 61019b7469aSperry int __signbitd(double); 611d82e7323Skleink 612d82e7323Skleink #ifdef __HAVE_LONG_DOUBLE 61319b7469aSperry int __fpclassifyl(long double); 61419b7469aSperry int __isfinitel(long double); 61519b7469aSperry int __isinfl(long double); 61619b7469aSperry int __isnanl(long double); 61719b7469aSperry int __signbitl(long double); 618d82e7323Skleink #endif 619afda0f82Sjoerg 62061f28255Scgd __END_DECLS 62161f28255Scgd 62261f28255Scgd #endif /* _MATH_H_ */ 623