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