source: trunk/src/emx/include/math.h@ 2058

Last change on this file since 2058 was 2058, checked in by bird, 20 years ago

Fixed some more incorrectness of the 'C' locale, it only defines the first 128 chars.

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