:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / include / crtdll / 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$
22  * $Author$
23  * $Date$
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