13a8617a8SJordan K. Hubbard /* 23a8617a8SJordan K. Hubbard * ==================================================== 33a8617a8SJordan K. Hubbard * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 43a8617a8SJordan K. Hubbard * 53a8617a8SJordan K. Hubbard * Developed at SunPro, a Sun Microsystems, Inc. business. 63a8617a8SJordan K. Hubbard * Permission to use, copy, modify, and distribute this 73a8617a8SJordan K. Hubbard * software is freely granted, provided that this notice 83a8617a8SJordan K. Hubbard * is preserved. 93a8617a8SJordan K. Hubbard * ==================================================== 103a8617a8SJordan K. Hubbard */ 113a8617a8SJordan K. Hubbard 123a8617a8SJordan K. Hubbard /* 133a8617a8SJordan K. Hubbard * from: @(#)fdlibm.h 5.1 93/09/24 147f3dea24SPeter Wemm * $FreeBSD$ 153a8617a8SJordan K. Hubbard */ 163a8617a8SJordan K. Hubbard 173a8617a8SJordan K. Hubbard #ifndef _MATH_H_ 183a8617a8SJordan K. Hubbard #define _MATH_H_ 193a8617a8SJordan K. Hubbard 203a8617a8SJordan K. Hubbard /* 213a8617a8SJordan K. Hubbard * ANSI/POSIX 223a8617a8SJordan K. Hubbard */ 233a8617a8SJordan K. Hubbard extern char __infinity[]; 243a8617a8SJordan K. Hubbard #define HUGE_VAL (*(double *) __infinity) 253a8617a8SJordan K. Hubbard 263a8617a8SJordan K. Hubbard /* 273a8617a8SJordan K. Hubbard * XOPEN/SVID 283a8617a8SJordan K. Hubbard */ 293a8617a8SJordan K. Hubbard #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) 303a8617a8SJordan K. Hubbard #define M_E 2.7182818284590452354 /* e */ 313a8617a8SJordan K. Hubbard #define M_LOG2E 1.4426950408889634074 /* log 2e */ 323a8617a8SJordan K. Hubbard #define M_LOG10E 0.43429448190325182765 /* log 10e */ 333a8617a8SJordan K. Hubbard #define M_LN2 0.69314718055994530942 /* log e2 */ 343a8617a8SJordan K. Hubbard #define M_LN10 2.30258509299404568402 /* log e10 */ 353a8617a8SJordan K. Hubbard #define M_PI 3.14159265358979323846 /* pi */ 363a8617a8SJordan K. Hubbard #define M_PI_2 1.57079632679489661923 /* pi/2 */ 373a8617a8SJordan K. Hubbard #define M_PI_4 0.78539816339744830962 /* pi/4 */ 383a8617a8SJordan K. Hubbard #define M_1_PI 0.31830988618379067154 /* 1/pi */ 393a8617a8SJordan K. Hubbard #define M_2_PI 0.63661977236758134308 /* 2/pi */ 403a8617a8SJordan K. Hubbard #define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ 413a8617a8SJordan K. Hubbard #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ 423a8617a8SJordan K. Hubbard #define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ 433a8617a8SJordan K. Hubbard 443a8617a8SJordan K. Hubbard #define MAXFLOAT ((float)3.40282346638528860e+38) 453a8617a8SJordan K. Hubbard extern int signgam; 463a8617a8SJordan K. Hubbard 473a8617a8SJordan K. Hubbard #if !defined(_XOPEN_SOURCE) 483a8617a8SJordan K. Hubbard enum fdversion {fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix}; 493a8617a8SJordan K. Hubbard 503a8617a8SJordan K. Hubbard #define _LIB_VERSION_TYPE enum fdversion 513a8617a8SJordan K. Hubbard #define _LIB_VERSION _fdlib_version 523a8617a8SJordan K. Hubbard 533a8617a8SJordan K. Hubbard /* if global variable _LIB_VERSION is not desirable, one may 543a8617a8SJordan K. Hubbard * change the following to be a constant by: 553a8617a8SJordan K. Hubbard * #define _LIB_VERSION_TYPE const enum version 563a8617a8SJordan K. Hubbard * In that case, after one initializes the value _LIB_VERSION (see 573a8617a8SJordan K. Hubbard * s_lib_version.c) during compile time, it cannot be modified 583a8617a8SJordan K. Hubbard * in the middle of a program 593a8617a8SJordan K. Hubbard */ 603a8617a8SJordan K. Hubbard extern _LIB_VERSION_TYPE _LIB_VERSION; 613a8617a8SJordan K. Hubbard 623a8617a8SJordan K. Hubbard #define _IEEE_ fdlibm_ieee 633a8617a8SJordan K. Hubbard #define _SVID_ fdlibm_svid 643a8617a8SJordan K. Hubbard #define _XOPEN_ fdlibm_xopen 653a8617a8SJordan K. Hubbard #define _POSIX_ fdlibm_posix 663a8617a8SJordan K. Hubbard 67d6f56cfcSDavid E. O'Brien /* We have a problem when using C++ since `exception' is a reserved 68d6f56cfcSDavid E. O'Brien name in C++. */ 696a9280beSBruce Evans #ifndef __cplusplus 703a8617a8SJordan K. Hubbard struct exception { 713a8617a8SJordan K. Hubbard int type; 723a8617a8SJordan K. Hubbard char *name; 733a8617a8SJordan K. Hubbard double arg1; 743a8617a8SJordan K. Hubbard double arg2; 753a8617a8SJordan K. Hubbard double retval; 763a8617a8SJordan K. Hubbard }; 776a9280beSBruce Evans #endif 783a8617a8SJordan K. Hubbard 793a8617a8SJordan K. Hubbard #define HUGE MAXFLOAT 803a8617a8SJordan K. Hubbard 813a8617a8SJordan K. Hubbard /* 823a8617a8SJordan K. Hubbard * set X_TLOSS = pi*2**52, which is possibly defined in <values.h> 833a8617a8SJordan K. Hubbard * (one may replace the following line by "#include <values.h>") 843a8617a8SJordan K. Hubbard */ 853a8617a8SJordan K. Hubbard 863a8617a8SJordan K. Hubbard #define X_TLOSS 1.41484755040568800000e+16 873a8617a8SJordan K. Hubbard 883a8617a8SJordan K. Hubbard #define DOMAIN 1 893a8617a8SJordan K. Hubbard #define SING 2 903a8617a8SJordan K. Hubbard #define OVERFLOW 3 913a8617a8SJordan K. Hubbard #define UNDERFLOW 4 923a8617a8SJordan K. Hubbard #define TLOSS 5 933a8617a8SJordan K. Hubbard #define PLOSS 6 943a8617a8SJordan K. Hubbard 953a8617a8SJordan K. Hubbard #endif /* !_XOPEN_SOURCE */ 963a8617a8SJordan K. Hubbard #endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */ 973a8617a8SJordan K. Hubbard 983a8617a8SJordan K. Hubbard 993a8617a8SJordan K. Hubbard #include <sys/cdefs.h> 1003a8617a8SJordan K. Hubbard /* 1013a8617a8SJordan K. Hubbard * ANSI/POSIX 1023a8617a8SJordan K. Hubbard */ 103ef1ee63eSAlexey Zelkin __BEGIN_DECLS 104ef1ee63eSAlexey Zelkin double acos __P((double)); 105ef1ee63eSAlexey Zelkin double asin __P((double)); 106ef1ee63eSAlexey Zelkin double atan __P((double)); 107ef1ee63eSAlexey Zelkin double atan2 __P((double, double)); 108ef1ee63eSAlexey Zelkin double cos __P((double)); 109ef1ee63eSAlexey Zelkin double sin __P((double)); 110ef1ee63eSAlexey Zelkin double tan __P((double)); 1113a8617a8SJordan K. Hubbard 112ef1ee63eSAlexey Zelkin double cosh __P((double)); 113ef1ee63eSAlexey Zelkin double sinh __P((double)); 114ef1ee63eSAlexey Zelkin double tanh __P((double)); 1153a8617a8SJordan K. Hubbard 116ef1ee63eSAlexey Zelkin double exp __P((double)); 117ef1ee63eSAlexey Zelkin double frexp __P((double, int *)); 118ef1ee63eSAlexey Zelkin double ldexp __P((double, int)); 119ef1ee63eSAlexey Zelkin double log __P((double)); 120ef1ee63eSAlexey Zelkin double log10 __P((double)); 121ef1ee63eSAlexey Zelkin double modf __P((double, double *)); 1223a8617a8SJordan K. Hubbard 123ef1ee63eSAlexey Zelkin double pow __P((double, double)); 124ef1ee63eSAlexey Zelkin double sqrt __P((double)); 1253a8617a8SJordan K. Hubbard 126ef1ee63eSAlexey Zelkin double ceil __P((double)); 127ef1ee63eSAlexey Zelkin double fabs __P((double)); 128ef1ee63eSAlexey Zelkin double floor __P((double)); 129ef1ee63eSAlexey Zelkin double fmod __P((double, double)); 1303a8617a8SJordan K. Hubbard 1313a8617a8SJordan K. Hubbard #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) 132ef1ee63eSAlexey Zelkin double erf __P((double)); 133ef1ee63eSAlexey Zelkin double erfc __P((double)); 134ef1ee63eSAlexey Zelkin double gamma __P((double)); 135ef1ee63eSAlexey Zelkin double hypot __P((double, double)); 136ef1ee63eSAlexey Zelkin int isinf __P((double)); 137ef1ee63eSAlexey Zelkin int isnan __P((double)); 138ef1ee63eSAlexey Zelkin int finite __P((double)); 139ef1ee63eSAlexey Zelkin double j0 __P((double)); 140ef1ee63eSAlexey Zelkin double j1 __P((double)); 141ef1ee63eSAlexey Zelkin double jn __P((int, double)); 142ef1ee63eSAlexey Zelkin double lgamma __P((double)); 143ef1ee63eSAlexey Zelkin double y0 __P((double)); 144ef1ee63eSAlexey Zelkin double y1 __P((double)); 145ef1ee63eSAlexey Zelkin double yn __P((int, double)); 1463a8617a8SJordan K. Hubbard 1473a8617a8SJordan K. Hubbard #if !defined(_XOPEN_SOURCE) 148ef1ee63eSAlexey Zelkin double acosh __P((double)); 149ef1ee63eSAlexey Zelkin double asinh __P((double)); 150ef1ee63eSAlexey Zelkin double atanh __P((double)); 151ef1ee63eSAlexey Zelkin double cbrt __P((double)); 152ef1ee63eSAlexey Zelkin double logb __P((double)); 153ef1ee63eSAlexey Zelkin double nextafter __P((double, double)); 154ef1ee63eSAlexey Zelkin double remainder __P((double, double)); 155ef1ee63eSAlexey Zelkin double scalb __P((double, double)); 1563a8617a8SJordan K. Hubbard 1576a9280beSBruce Evans #ifndef __cplusplus 158ef1ee63eSAlexey Zelkin int matherr __P((struct exception *)); 1596a9280beSBruce Evans #endif 1603a8617a8SJordan K. Hubbard 1613a8617a8SJordan K. Hubbard /* 1623a8617a8SJordan K. Hubbard * IEEE Test Vector 1633a8617a8SJordan K. Hubbard */ 164ef1ee63eSAlexey Zelkin double significand __P((double)); 1653a8617a8SJordan K. Hubbard 1663a8617a8SJordan K. Hubbard /* 1673a8617a8SJordan K. Hubbard * Functions callable from C, intended to support IEEE arithmetic. 1683a8617a8SJordan K. Hubbard */ 169ef1ee63eSAlexey Zelkin double copysign __P((double, double)); 170ef1ee63eSAlexey Zelkin int ilogb __P((double)); 171ef1ee63eSAlexey Zelkin double rint __P((double)); 172ef1ee63eSAlexey Zelkin double scalbn __P((double, int)); 1733a8617a8SJordan K. Hubbard 1743a8617a8SJordan K. Hubbard /* 1753a8617a8SJordan K. Hubbard * BSD math library entry points 1763a8617a8SJordan K. Hubbard */ 177ef1ee63eSAlexey Zelkin double drem __P((double, double)); 178ef1ee63eSAlexey Zelkin double expm1 __P((double)); 179ef1ee63eSAlexey Zelkin double log1p __P((double)); 1803a8617a8SJordan K. Hubbard 1813a8617a8SJordan K. Hubbard /* 1823a8617a8SJordan K. Hubbard * Reentrant version of gamma & lgamma; passes signgam back by reference 1833a8617a8SJordan K. Hubbard * as the second argument; user must allocate space for signgam. 1843a8617a8SJordan K. Hubbard */ 1853a8617a8SJordan K. Hubbard #ifdef _REENTRANT 186ef1ee63eSAlexey Zelkin double gamma_r __P((double, int *)); 187ef1ee63eSAlexey Zelkin double lgamma_r __P((double, int *)); 1883a8617a8SJordan K. Hubbard #endif /* _REENTRANT */ 1893a8617a8SJordan K. Hubbard 1903a8617a8SJordan K. Hubbard /* float versions of ANSI/POSIX functions */ 191ef1ee63eSAlexey Zelkin float acosf __P((float)); 192ef1ee63eSAlexey Zelkin float asinf __P((float)); 193ef1ee63eSAlexey Zelkin float atanf __P((float)); 194ef1ee63eSAlexey Zelkin float atan2f __P((float, float)); 195ef1ee63eSAlexey Zelkin float cosf __P((float)); 196ef1ee63eSAlexey Zelkin float sinf __P((float)); 197ef1ee63eSAlexey Zelkin float tanf __P((float)); 1983a8617a8SJordan K. Hubbard 199ef1ee63eSAlexey Zelkin float coshf __P((float)); 200ef1ee63eSAlexey Zelkin float sinhf __P((float)); 201ef1ee63eSAlexey Zelkin float tanhf __P((float)); 2023a8617a8SJordan K. Hubbard 203ef1ee63eSAlexey Zelkin float expf __P((float)); 204ef1ee63eSAlexey Zelkin float frexpf __P((float, int *)); 205ef1ee63eSAlexey Zelkin float ldexpf __P((float, int)); 206ef1ee63eSAlexey Zelkin float logf __P((float)); 207ef1ee63eSAlexey Zelkin float log10f __P((float)); 208ef1ee63eSAlexey Zelkin float modff __P((float, float *)); 2093a8617a8SJordan K. Hubbard 210ef1ee63eSAlexey Zelkin float powf __P((float, float)); 211ef1ee63eSAlexey Zelkin float sqrtf __P((float)); 2123a8617a8SJordan K. Hubbard 213ef1ee63eSAlexey Zelkin float ceilf __P((float)); 214ef1ee63eSAlexey Zelkin float fabsf __P((float)); 215ef1ee63eSAlexey Zelkin float floorf __P((float)); 216ef1ee63eSAlexey Zelkin float fmodf __P((float, float)); 2173a8617a8SJordan K. Hubbard 218ef1ee63eSAlexey Zelkin float erff __P((float)); 219ef1ee63eSAlexey Zelkin float erfcf __P((float)); 220ef1ee63eSAlexey Zelkin float gammaf __P((float)); 221ef1ee63eSAlexey Zelkin float hypotf __P((float, float)); 222ef1ee63eSAlexey Zelkin int isnanf __P((float)); 223ef1ee63eSAlexey Zelkin int finitef __P((float)); 224ef1ee63eSAlexey Zelkin float j0f __P((float)); 225ef1ee63eSAlexey Zelkin float j1f __P((float)); 226ef1ee63eSAlexey Zelkin float jnf __P((int, float)); 227ef1ee63eSAlexey Zelkin float lgammaf __P((float)); 228ef1ee63eSAlexey Zelkin float y0f __P((float)); 229ef1ee63eSAlexey Zelkin float y1f __P((float)); 230ef1ee63eSAlexey Zelkin float ynf __P((int, float)); 2313a8617a8SJordan K. Hubbard 232ef1ee63eSAlexey Zelkin float acoshf __P((float)); 233ef1ee63eSAlexey Zelkin float asinhf __P((float)); 234ef1ee63eSAlexey Zelkin float atanhf __P((float)); 235ef1ee63eSAlexey Zelkin float cbrtf __P((float)); 236ef1ee63eSAlexey Zelkin float logbf __P((float)); 237ef1ee63eSAlexey Zelkin float nextafterf __P((float, float)); 238ef1ee63eSAlexey Zelkin float remainderf __P((float, float)); 239ef1ee63eSAlexey Zelkin float scalbf __P((float, float)); 2403a8617a8SJordan K. Hubbard 2413a8617a8SJordan K. Hubbard /* 2423a8617a8SJordan K. Hubbard * float version of IEEE Test Vector 2433a8617a8SJordan K. Hubbard */ 244ef1ee63eSAlexey Zelkin float significandf __P((float)); 2453a8617a8SJordan K. Hubbard 2463a8617a8SJordan K. Hubbard /* 2473a8617a8SJordan K. Hubbard * Float versions of functions callable from C, intended to support 2483a8617a8SJordan K. Hubbard * IEEE arithmetic. 2493a8617a8SJordan K. Hubbard */ 250ef1ee63eSAlexey Zelkin float copysignf __P((float, float)); 251ef1ee63eSAlexey Zelkin int ilogbf __P((float)); 252ef1ee63eSAlexey Zelkin float rintf __P((float)); 253ef1ee63eSAlexey Zelkin float scalbnf __P((float, int)); 2543a8617a8SJordan K. Hubbard 2553a8617a8SJordan K. Hubbard /* 2563a8617a8SJordan K. Hubbard * float versions of BSD math library entry points 2573a8617a8SJordan K. Hubbard */ 258ef1ee63eSAlexey Zelkin float dremf __P((float, float)); 259ef1ee63eSAlexey Zelkin float expm1f __P((float)); 260ef1ee63eSAlexey Zelkin float log1pf __P((float)); 2613a8617a8SJordan K. Hubbard 2623a8617a8SJordan K. Hubbard /* 2633a8617a8SJordan K. Hubbard * Float versions of reentrant version of gamma & lgamma; passes 2643a8617a8SJordan K. Hubbard * signgam back by reference as the second argument; user must 2653a8617a8SJordan K. Hubbard * allocate space for signgam. 2663a8617a8SJordan K. Hubbard */ 2673a8617a8SJordan K. Hubbard #ifdef _REENTRANT 268ef1ee63eSAlexey Zelkin float gammaf_r __P((float, int *)); 269ef1ee63eSAlexey Zelkin float lgammaf_r __P((float, int *)); 2703a8617a8SJordan K. Hubbard #endif /* _REENTRANT */ 2713a8617a8SJordan K. Hubbard 2723a8617a8SJordan K. Hubbard #endif /* !_XOPEN_SOURCE */ 2733a8617a8SJordan K. Hubbard #endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */ 2743a8617a8SJordan K. Hubbard __END_DECLS 2753a8617a8SJordan K. Hubbard 276ef1ee63eSAlexey Zelkin #endif /* !_MATH_H_ */ 277