51bdf2ca90b3ebd1d642796ecc8a330a217ede93
[reactos.git] / reactos / include / msvcrt / math.h
1 /*
2 * math.h
3 *
4 * Mathematical functions.
5 *
6 * This file is part of the Mingw32 package.
7 *
8 * Contributors:
9 * Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 * $Revision: 1.3 $
22 * $Author: chorns $
23 * $Date: 2002/09/08 10:22:31 $
24 *
25 */
26 // added modfl
27
28 #ifndef _MATH_H_
29 #define _MATH_H_
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 /*
36 * HUGE_VAL is returned by strtod when the value would overflow the
37 * representation of 'double'. There are other uses as well.
38 *
39 * __imp__HUGE is a pointer to the actual variable _HUGE in
40 * MSVCRT.DLL. If we used _HUGE directly we would get a pointer
41 * to a thunk function.
42 *
43 * NOTE: The CRTDLL version uses _HUGE_dll instead.
44 */
45 #if __MSVCRT__
46 extern double* __imp__HUGE;
47 #define HUGE_VAL (*__imp__HUGE)
48 #else
49 /* CRTDLL */
50 extern double* _HUGE_dll;
51 #define HUGE_VAL (*_HUGE_dll)
52 #endif
53
54
55 struct _exception
56 {
57 int type;
58 char *name;
59 double arg1;
60 double arg2;
61 double retval;
62 };
63
64 /*
65 * Types for the above _exception structure.
66 */
67
68 #define _DOMAIN 1 /* domain error in argument */
69 #define _SING 2 /* singularity */
70 #define _OVERFLOW 3 /* range overflow */
71 #define _UNDERFLOW 4 /* range underflow */
72 #define _TLOSS 5 /* total loss of precision */
73 #define _PLOSS 6 /* partial loss of precision */
74
75 /*
76 * Exception types with non-ANSI names for compatibility.
77 */
78
79 #ifndef __STRICT_ANSI__
80 #ifndef _NO_OLDNAMES
81
82 #define DOMAIN _DOMAIN
83 #define SING _SING
84 #define OVERFLOW _OVERFLOW
85 #define UNDERFLOW _UNDERFLOW
86 #define TLOSS _TLOSS
87 #define PLOSS _PLOSS
88
89 #endif /* Not _NO_OLDNAMES */
90 #endif /* Not __STRICT_ANSI__ */
91
92
93 double sin (double x);
94 double cos (double x);
95 double tan (double x);
96 double sinh (double x);
97 double cosh (double x);
98 double tanh (double x);
99 double asin (double x);
100 double acos (double x);
101 double atan (double x);
102 double atan2 (double y, double x);
103 double exp (double x);
104 double log (double x);
105 double log10 (double x);
106 double pow (double x, double y);
107 long double powl (long double x,long double y);
108 double sqrt (double x);
109 double ceil (double x);
110 double floor (double x);
111 double fabs (double x);
112 double ldexp (double x, int n);
113 double frexp (double x, int* exp);
114 double modf (double x, double* ip);
115 long double modfl (long double x,long double* ip);
116 double fmod (double x, double y);
117
118
119 #ifndef __STRICT_ANSI__
120
121 /* Complex number (for cabs) */
122 struct _complex
123 {
124 double x; /* Real part */
125 double y; /* Imaginary part */
126 };
127
128 double _cabs (struct _complex x);
129 double _hypot (double x, double y);
130 double _j0 (double x);
131 double _j1 (double x);
132 double _jn (int n, double x);
133 double _y0 (double x);
134 double _y1 (double x);
135 double _yn (int n, double x);
136
137 #ifndef _NO_OLDNAMES
138
139 /*
140 * Non-underscored versions of non-ANSI functions. These reside in
141 * liboldnames.a. Provided for extra portability.
142 */
143 double cabs (struct _complex x);
144 double hypot (double x, double y);
145 double j0 (double x);
146 double j1 (double x);
147 double jn (int n, double x);
148 double y0 (double x);
149 double y1 (double x);
150 double yn (int n, double x);
151
152 #endif /* Not _NO_OLDNAMES */
153
154 #endif /* Not __STRICT_ANSI__ */
155
156 #ifdef __cplusplus
157 }
158 #endif
159
160 #endif /* Not _MATH_H_ */
161