xref: /illumos-gate/usr/src/head/iso/math_iso.h (revision 13b136d3061155363c62c9f6568d25b8b27da8f6)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
23  */
24 /*
25  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
26  * Use is subject to license terms.
27  */
28 
29 #ifndef _ISO_MATH_ISO_H
30 #define	_ISO_MATH_ISO_H
31 
32 #include <sys/feature_tests.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 #if !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && !defined(__C99FEATURES__)
39 typedef union _h_val {
40 	unsigned long _i[sizeof (double) / sizeof (unsigned long)];
41 	double _d;
42 } _h_val;
43 
44 #ifdef __STDC__
45 extern const _h_val __huge_val;
46 #else
47 extern _h_val __huge_val;
48 #endif
49 #undef	HUGE_VAL
50 #define	HUGE_VAL __huge_val._d
51 #endif	/* !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && ... */
52 
53 #if __cplusplus >= 199711L
54 namespace std {
55 #endif
56 
57 extern double acos(double);
58 extern double asin(double);
59 extern double atan(double);
60 extern double atan2(double, double);
61 extern double cos(double);
62 extern double sin(double);
63 extern double tan(double);
64 
65 extern double cosh(double);
66 extern double sinh(double);
67 extern double tanh(double);
68 
69 extern double exp(double);
70 extern double frexp(double, int *);
71 extern double ldexp(double, int);
72 extern double log(double);
73 extern double log10(double);
74 extern double modf(double, double *);
75 
76 extern double pow(double, double);
77 extern double sqrt(double);
78 
79 extern double ceil(double);
80 extern double fabs(double);
81 extern double floor(double);
82 extern double fmod(double, double);
83 
84 #if defined(__MATHERR_ERRNO_DONTCARE)
85 #pragma does_not_read_global_data(acos, asin, atan, atan2)
86 #pragma does_not_read_global_data(cos, sin, tan, cosh, sinh, tanh)
87 #pragma does_not_read_global_data(exp, log, log10, pow, sqrt)
88 #pragma does_not_read_global_data(frexp, ldexp, modf)
89 #pragma does_not_read_global_data(ceil, fabs, floor, fmod)
90 #pragma does_not_write_global_data(acos, asin, atan, atan2)
91 #pragma does_not_write_global_data(cos, sin, tan, cosh, sinh, tanh)
92 #pragma does_not_write_global_data(exp, log, log10, pow, sqrt)
93 #pragma does_not_write_global_data(ldexp)
94 #pragma does_not_write_global_data(ceil, fabs, floor, fmod)
95 #pragma no_side_effect(acos, asin, atan, atan2)
96 #pragma no_side_effect(cos, sin, tan, cosh, sinh, tanh)
97 #pragma no_side_effect(exp, log, log10, pow, sqrt)
98 #pragma no_side_effect(ldexp)
99 #pragma no_side_effect(ceil, fabs, floor, fmod)
100 #endif
101 
102 #if __cplusplus >= 199711L
103 extern float __acosf(float);
104 extern float __asinf(float);
105 extern float __atanf(float);
106 extern float __atan2f(float, float);
107 extern float __ceilf(float);
108 extern float __cosf(float);
109 extern float __coshf(float);
110 extern float __expf(float);
111 extern float __fabsf(float);
112 extern float __floorf(float);
113 extern float __fmodf(float, float);
114 extern float __frexpf(float, int *);
115 extern float __ldexpf(float, int);
116 extern float __logf(float);
117 extern float __log10f(float);
118 extern float __modff(float, float *);
119 extern float __powf(float, float);
120 extern float __sinf(float);
121 extern float __sinhf(float);
122 extern float __sqrtf(float);
123 extern float __tanf(float);
124 extern float __tanhf(float);
125 
126 extern long double __acosl(long double);
127 extern long double __asinl(long double);
128 extern long double __atanl(long double);
129 extern long double __atan2l(long double, long double);
130 extern long double __ceill(long double);
131 extern long double __cosl(long double);
132 extern long double __coshl(long double);
133 extern long double __expl(long double);
134 extern long double __fabsl(long double);
135 extern long double __floorl(long double);
136 extern long double __fmodl(long double, long double);
137 extern long double __frexpl(long double, int *);
138 extern long double __ldexpl(long double, int);
139 extern long double __logl(long double);
140 extern long double __log10l(long double);
141 extern long double __modfl(long double, long double *);
142 extern long double __powl(long double, long double);
143 extern long double __sinl(long double);
144 extern long double __sinhl(long double);
145 extern long double __sqrtl(long double);
146 extern long double __tanl(long double);
147 extern long double __tanhl(long double);
148 
149 extern "C++" {
150 #undef	__X
151 #undef	__Y
152 	inline double abs(double __X) { return fabs(__X); }
153 
154 	inline double pow(double __X, int __Y) {
155 		return (pow(__X, (double)(__Y)));
156 	}
157 
158 	inline float abs(float __X) { return __fabsf(__X); }
159 	inline float acos(float __X) { return __acosf(__X); }
160 	inline float asin(float __X) { return __asinf(__X); }
161 	inline float atan(float __X) { return __atanf(__X); }
162 	inline float atan2(float __X, float __Y) { return __atan2f(__X, __Y); }
163 	inline float ceil(float __X) { return __ceilf(__X); }
164 	inline float cos(float __X) { return __cosf(__X); }
165 	inline float cosh(float __X) { return __coshf(__X); }
166 	inline float exp(float __X) { return __expf(__X); }
167 	inline float fabs(float __X) { return __fabsf(__X); }
168 	inline float floor(float __X) { return __floorf(__X); }
169 	inline float fmod(float __X, float __Y) { return __fmodf(__X, __Y); }
170 	inline float frexp(float __X, int *__Y) { return __frexpf(__X, __Y); }
171 	inline float ldexp(float __X, int __Y) { return __ldexpf(__X, __Y); }
172 	inline float log(float __X) { return __logf(__X); }
173 	inline float log10(float __X) { return __log10f(__X); }
174 	inline float modf(float __X, float *__Y) { return __modff(__X, __Y); }
175 	inline float pow(float __X, float __Y) { return __powf(__X, __Y); }
176 
177 	inline float pow(float __X, int __Y) {
178 		return (pow((double)(__X), (double)(__Y)));
179 	}
180 
181 	inline float sin(float __X) { return __sinf(__X); }
182 	inline float sinh(float __X) { return __sinhf(__X); }
183 	inline float sqrt(float __X) { return __sqrtf(__X); }
184 	inline float tan(float __X) { return __tanf(__X); }
185 	inline float tanh(float __X) { return __tanhf(__X); }
186 
187 	inline long double abs(long double __X) { return __fabsl(__X); }
188 	inline long double acos(long double __X) { return __acosl(__X); }
189 	inline long double asin(long double __X) { return __asinl(__X); }
190 	inline long double atan(long double __X) { return __atanl(__X); }
191 
192 	inline long double atan2(long double __X, long double __Y) {
193 		return (__atan2l(__X, __Y));
194 	}
195 
196 	inline long double ceil(long double __X) { return __ceill(__X); }
197 	inline long double cos(long double __X) { return __cosl(__X); }
198 	inline long double cosh(long double __X) { return __coshl(__X); }
199 	inline long double exp(long double __X) { return __expl(__X); }
200 	inline long double fabs(long double __X) { return __fabsl(__X); }
201 	inline long double floor(long double __X) { return __floorl(__X); }
202 
203 	inline long double fmod(long double __X, long double __Y) {
204 		return (__fmodl(__X, __Y));
205 	}
206 
207 	inline long double frexp(long double __X, int *__Y) {
208 		return (__frexpl(__X, __Y));
209 	}
210 
211 	inline long double ldexp(long double __X, int __Y) {
212 		return (__ldexpl(__X, __Y));
213 	}
214 
215 	inline long double log(long double __X) { return __logl(__X); }
216 	inline long double log10(long double __X) { return __log10l(__X); }
217 
218 	inline long double modf(long double __X, long double *__Y) {
219 		return (__modfl(__X, __Y));
220 	}
221 
222 	inline long double pow(long double __X, long double __Y) {
223 		return (__powl(__X, __Y));
224 	}
225 
226 	inline long double pow(long double __X, int __Y) {
227 		return (__powl(__X, (long double) (__Y)));
228 	}
229 
230 	inline long double sin(long double __X) { return __sinl(__X); }
231 	inline long double sinh(long double __X) { return __sinhl(__X); }
232 	inline long double sqrt(long double __X) { return __sqrtl(__X); }
233 	inline long double tan(long double __X) { return __tanl(__X); }
234 	inline long double tanh(long double __X) { return __tanhl(__X); }
235 }	/* end of extern "C++" */
236 #endif	/* __cplusplus >= 199711L */
237 
238 #if __cplusplus >= 199711L
239 }	/* end of namespace std */
240 #endif
241 
242 #ifdef __cplusplus
243 }
244 #endif
245 
246 #endif	/* _ISO_MATH_ISO_H */
247