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