Annotation of src/include/math.h, Revision 1.35
1.35 ! jca 1: /* $OpenBSD: math.h,v 1.34 2015/07/19 17:41:49 martynas Exp $ */
1.1 deraadt 2: /*
3: * ====================================================
4: * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
5: *
6: * Developed at SunPro, a Sun Microsystems, Inc. business.
7: * Permission to use, copy, modify, and distribute this
8: * software is freely granted, provided that this notice
9: * is preserved.
10: * ====================================================
11: */
12:
13: /*
1.3 millert 14: * from: @(#)fdlibm.h 5.1 93/09/24
1.1 deraadt 15: */
16:
17: #ifndef _MATH_H_
18: #define _MATH_H_
19:
1.17 martynas 20: #include <sys/_types.h>
1.18 martynas 21: #include <sys/limits.h>
1.11 millert 22:
1.29 martynas 23: __BEGIN_DECLS
1.1 deraadt 24: /*
25: * ANSI/POSIX
26: */
27: extern char __infinity[];
1.35 ! jca 28: #if __GNUC_PREREQ__(3, 3)
1.27 martynas 29: #define HUGE_VAL __builtin_huge_val()
1.35 ! jca 30: #else /* __GNUC_PREREQ__(3, 3) */
1.12 otto 31: #define HUGE_VAL (*(double *)(void *)__infinity)
1.35 ! jca 32: #endif /* __GNUC_PREREQ__(3, 3) */
1.9 espie 33:
1.18 martynas 34: /*
1.9 espie 35: * C99
36: */
1.18 martynas 37: #if __ISO_C_VISIBLE >= 1999
38: typedef __double_t double_t;
39: typedef __float_t float_t;
40:
1.35 ! jca 41: #if __GNUC_PREREQ__(3, 3)
1.27 martynas 42: #define HUGE_VALF __builtin_huge_valf()
43: #define HUGE_VALL __builtin_huge_vall()
44: #define INFINITY __builtin_inff()
45: #define NAN __builtin_nanf("")
1.35 ! jca 46: #else /* __GNUC_PREREQ__(3, 3) */
1.18 martynas 47: #define HUGE_VALF ((float)HUGE_VAL)
48: #define HUGE_VALL ((long double)HUGE_VAL)
49: #define INFINITY HUGE_VALF
1.19 martynas 50: extern char __nan[];
51: #define NAN (*(float *)(void *)__nan)
1.35 ! jca 52: #endif /* __GNUC_PREREQ__(3, 3) */
1.18 martynas 53:
54: #define FP_INFINITE 0x01
55: #define FP_NAN 0x02
56: #define FP_NORMAL 0x04
57: #define FP_SUBNORMAL 0x08
58: #define FP_ZERO 0x10
59:
60: #define FP_ILOGB0 (-INT_MAX)
61: #define FP_ILOGBNAN INT_MAX
1.34 martynas 62:
63: #ifdef __FP_FAST_FMA
64: #define FP_FAST_FMA 1
65: #endif /* __FP_FAST_FMA */
66:
67: #ifdef __FP_FAST_FMAF
68: #define FP_FAST_FMAF 1
69: #endif /* __FP_FAST_FMAF */
70:
71: #ifdef __FP_FAST_FMAL
72: #define FP_FAST_FMAL 1
73: #endif /* __FP_FAST_FMAL */
74:
75: #define MATH_ERRNO 1
76: #define MATH_ERREXCEPT 2
77: #define math_errhandling MATH_ERREXCEPT
1.18 martynas 78:
79: #define fpclassify(x) \
80: ((sizeof (x) == sizeof (float)) ? \
81: __fpclassifyf(x) \
82: : (sizeof (x) == sizeof (double)) ? \
83: __fpclassify(x) \
84: : __fpclassifyl(x))
85: #define isfinite(x) \
86: ((sizeof (x) == sizeof (float)) ? \
87: __isfinitef(x) \
88: : (sizeof (x) == sizeof (double)) ? \
89: __isfinite(x) \
90: : __isfinitel(x))
91: #define isnormal(x) \
92: ((sizeof (x) == sizeof (float)) ? \
93: __isnormalf(x) \
94: : (sizeof (x) == sizeof (double)) ? \
95: __isnormal(x) \
96: : __isnormall(x))
97: #define signbit(x) \
98: ((sizeof (x) == sizeof (float)) ? \
99: __signbitf(x) \
100: : (sizeof (x) == sizeof (double)) ? \
101: __signbit(x) \
102: : __signbitl(x))
103:
104: #define isgreater(x, y) (!isunordered((x), (y)) && (x) > (y))
105: #define isgreaterequal(x, y) (!isunordered((x), (y)) && (x) >= (y))
106: #define isless(x, y) (!isunordered((x), (y)) && (x) < (y))
107: #define islessequal(x, y) (!isunordered((x), (y)) && (x) <= (y))
108: #define islessgreater(x, y) (!isunordered((x), (y)) && \
109: ((x) > (y) || (y) > (x)))
110: #define isunordered(x, y) (isnan(x) || isnan(y))
111: #endif /* __ISO_C_VISIBLE >= 1999 */
1.1 deraadt 112:
1.21 martynas 113: #define isinf(x) \
114: ((sizeof (x) == sizeof (float)) ? \
1.23 martynas 115: __isinff(x) \
1.21 martynas 116: : (sizeof (x) == sizeof (double)) ? \
117: __isinf(x) \
118: : __isinfl(x))
119: #define isnan(x) \
120: ((sizeof (x) == sizeof (float)) ? \
1.23 martynas 121: __isnanf(x) \
1.21 martynas 122: : (sizeof (x) == sizeof (double)) ? \
123: __isnan(x) \
124: : __isnanl(x))
125:
1.1 deraadt 126: /*
127: * XOPEN/SVID
128: */
1.11 millert 129: #if __BSD_VISIBLE || __XPG_VISIBLE
1.33 martynas 130: #define M_E ((double)2.7182818284590452354) /* e */
131: #define M_LOG2E ((double)1.4426950408889634074) /* log 2e */
132: #define M_LOG10E ((double)0.43429448190325182765) /* log 10e */
133: #define M_LN2 ((double)0.69314718055994530942) /* log e2 */
134: #define M_LN10 ((double)2.30258509299404568402) /* log e10 */
135: #define M_PI ((double)3.14159265358979323846) /* pi */
136: #define M_PI_2 ((double)1.57079632679489661923) /* pi/2 */
137: #define M_PI_4 ((double)0.78539816339744830962) /* pi/4 */
138: #define M_1_PI ((double)0.31830988618379067154) /* 1/pi */
139: #define M_2_PI ((double)0.63661977236758134308) /* 2/pi */
140: #define M_2_SQRTPI ((double)1.12837916709551257390) /* 2/sqrt(pi) */
141: #define M_SQRT2 ((double)1.41421356237309504880) /* sqrt(2) */
142: #define M_SQRT1_2 ((double)0.70710678118654752440) /* 1/sqrt(2) */
1.1 deraadt 143:
144: #define MAXFLOAT ((float)3.40282346638528860e+38)
1.7 jason 145:
1.1 deraadt 146: extern int signgam;
1.11 millert 147: #endif /* __BSD_VISIBLE || __XPG_VISIBLE */
1.33 martynas 148:
149: #if __POSIX_VISIBLE >= 201403
150: #define M_El 2.718281828459045235360287471352662498L /* e */
151: #define M_LOG2El 1.442695040888963407359924681001892137L /* log 2e */
152: #define M_LOG10El 0.434294481903251827651128918916605082L /* log 10e */
153: #define M_LN2l 0.693147180559945309417232121458176568L /* log e2 */
154: #define M_LN10l 2.302585092994045684017991454684364208L /* log e10 */
155: #define M_PIl 3.141592653589793238462643383279502884L /* pi */
156: #define M_PI_2l 1.570796326794896619231321691639751442L /* pi/2 */
157: #define M_PI_4l 0.785398163397448309615660845819875721L /* pi/4 */
158: #define M_1_PIl 0.318309886183790671537767526745028724L /* 1/pi */
159: #define M_2_PIl 0.636619772367581343075535053490057448L /* 2/pi */
160: #define M_2_SQRTPIl 1.128379167095512573896158903121545172L /* 2/sqrt(pi) */
161: #define M_SQRT2l 1.414213562373095048801688724209698079L /* sqrt(2) */
162: #define M_SQRT1_2l 0.707106781186547524400844362104849039L /* 1/sqrt(2) */
163: #endif /* __POSIX_VISIBLE >= 201403 */
1.1 deraadt 164:
1.11 millert 165: #if __BSD_VISIBLE
1.1 deraadt 166: #define HUGE MAXFLOAT
1.11 millert 167: #endif /* __BSD_VISIBLE */
1.1 deraadt 168:
169: /*
170: * ANSI/POSIX
171: */
1.25 martynas 172: double acos(double);
173: double asin(double);
174: double atan(double);
175: double atan2(double, double);
176: double cos(double);
177: double sin(double);
178: double tan(double);
179:
180: double cosh(double);
181: double sinh(double);
182: double tanh(double);
183:
184: double exp(double);
185: double frexp(double, int *);
186: double ldexp(double, int);
187: double log(double);
188: double log10(double);
189: double modf(double, double *);
190:
191: double pow(double, double);
192: double sqrt(double);
193:
194: double ceil(double);
195: double fabs(double);
196: double floor(double);
197: double fmod(double, double);
1.1 deraadt 198:
1.18 martynas 199: /*
200: * C99
201: */
202: #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XPG_VISIBLE
1.25 martynas 203: double acosh(double);
204: double asinh(double);
205: double atanh(double);
1.18 martynas 206:
1.25 martynas 207: double exp2(double);
208: double expm1(double);
209: int ilogb(double);
210: double log1p(double);
211: double log2(double);
212: double logb(double);
213: double scalbn(double, int);
214: double scalbln(double, long int);
1.18 martynas 215:
1.25 martynas 216: double cbrt(double);
217: double hypot(double, double);
1.18 martynas 218:
1.25 martynas 219: double erf(double);
220: double erfc(double);
221: double lgamma(double);
222: double tgamma(double);
1.18 martynas 223:
1.25 martynas 224: double nearbyint(double);
225: double rint(double);
226: long int lrint(double);
227: long long int llrint(double);
228: double round(double);
229: long int lround(double);
230: long long int llround(double);
231: double trunc(double);
1.13 brad 232:
1.25 martynas 233: double remainder(double, double);
234: double remquo(double, double, int *);
1.18 martynas 235:
1.25 martynas 236: double copysign(double, double);
237: double nan(const char *);
238: double nextafter(double, double);
239: double nexttoward(double, long double);
1.18 martynas 240:
1.25 martynas 241: double fdim(double, double);
242: double fmax(double, double);
243: double fmin(double, double);
1.18 martynas 244:
1.25 martynas 245: double fma(double, double, double);
1.18 martynas 246: #endif /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XPG_VISIBLE */
247:
1.11 millert 248: #if __BSD_VISIBLE || __XPG_VISIBLE
1.25 martynas 249: double j0(double);
250: double j1(double);
251: double jn(int, double);
252: double scalb(double, double);
253: double y0(double);
254: double y1(double);
255: double yn(int, double);
1.18 martynas 256: #endif /* __BSD_VISIBLE || __XPG_VISIBLE */
1.1 deraadt 257:
1.18 martynas 258: #if __BSD_VISIBLE || __XPG_VISIBLE <= 500
1.25 martynas 259: double gamma(double);
1.18 martynas 260: #endif /* __BSD_VISIBLE || __XPG_VISIBLE <= 500 */
1.1 deraadt 261:
262: /*
263: * BSD math library entry points
264: */
1.18 martynas 265: #if __BSD_VISIBLE
1.25 martynas 266: double drem(double, double);
267: int finite(double);
1.1 deraadt 268:
269: /*
270: * Reentrant version of gamma & lgamma; passes signgam back by reference
271: * as the second argument; user must allocate space for signgam.
272: */
1.25 martynas 273: double gamma_r(double, int *);
274: double lgamma_r(double, int *);
1.1 deraadt 275:
1.18 martynas 276: /*
277: * IEEE Test Vector
278: */
1.25 martynas 279: double significand(double);
1.18 martynas 280: #endif /* __BSD_VISIBLE */
1.1 deraadt 281:
1.18 martynas 282: /*
283: * Float versions of C99 functions
284: */
285: #if __ISO_C_VISIBLE >= 1999
1.25 martynas 286: float acosf(float);
287: float asinf(float);
288: float atanf(float);
289: float atan2f(float, float);
290: float cosf(float);
291: float sinf(float);
292: float tanf(float);
293:
294: float acoshf(float);
295: float asinhf(float);
296: float atanhf(float);
297: float coshf(float);
298: float sinhf(float);
299: float tanhf(float);
300:
301: float expf(float);
302: float exp2f(float);
303: float expm1f(float);
304: float frexpf(float, int *);
305: int ilogbf(float);
306: float ldexpf(float, int);
307: float logf(float);
308: float log10f(float);
309: float log1pf(float);
310: float log2f(float);
311: float logbf(float);
312: float modff(float, float *);
313: float scalbnf(float, int);
314: float scalblnf(float, long int);
315:
316: float cbrtf(float);
317: float fabsf(float);
318: float hypotf(float, float);
319: float powf(float, float);
320: float sqrtf(float);
321:
322: float erff(float);
323: float erfcf(float);
324: float lgammaf(float);
325: float tgammaf(float);
326:
327: float ceilf(float);
328: float floorf(float);
329: float nearbyintf(float);
330: float rintf(float);
331: long int lrintf(float);
332: long long int llrintf(float);
333: float roundf(float);
334: long int lroundf(float);
335: long long int llroundf(float);
336: float truncf(float);
337:
338: float fmodf(float, float);
339: float remainderf(float, float);
340: float remquof(float, float, int *);
341:
342: float copysignf(float, float);
343: float nanf(const char *);
344: float nextafterf(float, float);
345: float nexttowardf(float, long double);
346:
347: float fdimf(float, float);
348: float fmaxf(float, float);
349: float fminf(float, float);
1.18 martynas 350:
1.25 martynas 351: float fmaf(float, float, float);
1.18 martynas 352: #endif /* __ISO_C_VISIBLE >= 1999 */
1.6 millert 353:
1.18 martynas 354: #if __BSD_VISIBLE || __XPG_VISIBLE
1.25 martynas 355: float j0f(float);
356: float j1f(float);
357: float jnf(int, float);
358: float scalbf(float, float);
359: float y0f(float);
360: float y1f(float);
361: float ynf(int, float);
1.18 martynas 362: #endif /* __BSD_VISIBLE || __XPG_VISIBLE */
1.6 millert 363:
1.18 martynas 364: #if __BSD_VISIBLE || __XPG_VISIBLE <= 500
1.25 martynas 365: float gammaf(float);
1.18 martynas 366: #endif /* __BSD_VISIBLE || __XPG_VISIBLE <= 500 */
1.1 deraadt 367:
368: /*
1.18 martynas 369: * Float versions of BSD math library entry points
1.1 deraadt 370: */
1.18 martynas 371: #if __BSD_VISIBLE
1.25 martynas 372: float dremf(float, float);
373: int finitef(float);
374: int isinff(float);
375: int isnanf(float);
1.1 deraadt 376:
377: /*
1.18 martynas 378: * Float versions of reentrant version of gamma & lgamma; passes
379: * signgam back by reference as the second argument; user must
380: * allocate space for signgam.
1.1 deraadt 381: */
1.25 martynas 382: float gammaf_r(float, int *);
383: float lgammaf_r(float, int *);
1.1 deraadt 384:
385: /*
1.18 martynas 386: * Float version of IEEE Test Vector
1.1 deraadt 387: */
1.25 martynas 388: float significandf(float);
1.18 martynas 389: #endif /* __BSD_VISIBLE */
1.1 deraadt 390:
391: /*
1.18 martynas 392: * Long double versions of C99 functions
1.1 deraadt 393: */
1.18 martynas 394: #if __ISO_C_VISIBLE >= 1999
1.25 martynas 395: long double acosl(long double);
396: long double asinl(long double);
397: long double atanl(long double);
398: long double atan2l(long double, long double);
399: long double cosl(long double);
400: long double sinl(long double);
401: long double tanl(long double);
1.18 martynas 402:
1.25 martynas 403: long double acoshl(long double);
404: long double asinhl(long double);
405: long double atanhl(long double);
406: long double coshl(long double);
407: long double sinhl(long double);
408: long double tanhl(long double);
1.18 martynas 409:
1.25 martynas 410: long double expl(long double);
411: long double exp2l(long double);
412: long double expm1l(long double);
413: long double frexpl(long double, int *);
414: int ilogbl(long double);
415: long double ldexpl(long double, int);
416: long double logl(long double);
417: long double log10l(long double);
418: long double log1pl(long double);
419: long double log2l(long double);
420: long double logbl(long double);
421: long double modfl(long double, long double *);
422: long double scalbnl(long double, int);
423: long double scalblnl(long double, long int);
1.18 martynas 424:
1.25 martynas 425: long double cbrtl(long double);
426: long double fabsl(long double);
427: long double hypotl(long double, long double);
428: long double powl(long double, long double);
429: long double sqrtl(long double);
1.18 martynas 430:
1.25 martynas 431: long double erfl(long double);
432: long double erfcl(long double);
433: long double lgammal(long double);
434: long double tgammal(long double);
1.18 martynas 435:
1.25 martynas 436: long double ceill(long double);
437: long double floorl(long double);
438: long double nearbyintl(long double);
439: long double rintl(long double);
440: long int lrintl(long double);
441: long long int llrintl(long double);
442: long double roundl(long double);
443: long int lroundl(long double);
444: long long int llroundl(long double);
445: long double truncl(long double);
1.18 martynas 446:
1.25 martynas 447: long double fmodl(long double, long double);
448: long double remainderl(long double, long double);
449: long double remquol(long double, long double, int *);
1.18 martynas 450:
1.25 martynas 451: long double copysignl(long double, long double);
452: long double nanl(const char *);
453: long double nextafterl(long double, long double);
454: long double nexttowardl(long double, long double);
1.18 martynas 455:
1.25 martynas 456: long double fdiml(long double, long double);
457: long double fmaxl(long double, long double);
458: long double fminl(long double, long double);
1.18 martynas 459:
1.25 martynas 460: long double fmal(long double, long double, long double);
1.18 martynas 461: #endif /* __ISO_C_VISIBLE >= 1999 */
1.1 deraadt 462:
1.18 martynas 463: /*
464: * Library implementation
465: */
1.25 martynas 466: int __fpclassify(double);
467: int __fpclassifyf(float);
468: int __fpclassifyl(long double);
469: int __isfinite(double);
470: int __isfinitef(float);
471: int __isfinitel(long double);
472: int __isinf(double);
473: int __isinff(float);
474: int __isinfl(long double);
475: int __isnan(double);
476: int __isnanf(float);
477: int __isnanl(long double);
478: int __isnormal(double);
479: int __isnormalf(float);
480: int __isnormall(long double);
481: int __signbit(double);
482: int __signbitf(float);
483: int __signbitl(long double);
1.1 deraadt 484: __END_DECLS
485:
1.18 martynas 486: #endif /* !_MATH_H_ */