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 #ifndef __P 39 #ifdef __STDC__ 40 #define __P(p) p 41 #else 42 #define __P(p) () 43 #endif 44 #endif /* !defined(__P) */ 45 46 #if !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && !defined(__C99FEATURES__) 47 typedef union _h_val { 48 unsigned long _i[sizeof (double) / sizeof (unsigned long)]; 49 double _d; 50 } _h_val; 51 52 #ifdef __STDC__ 53 extern const _h_val __huge_val; 54 #else 55 extern _h_val __huge_val; 56 #endif 57 #undef HUGE_VAL 58 #define HUGE_VAL __huge_val._d 59 #endif /* !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && ... */ 60 61 #if __cplusplus >= 199711L 62 namespace std { 63 #endif 64 65 extern double acos __P((double)); 66 extern double asin __P((double)); 67 extern double atan __P((double)); 68 extern double atan2 __P((double, double)); 69 extern double cos __P((double)); 70 extern double sin __P((double)); 71 extern double tan __P((double)); 72 73 extern double cosh __P((double)); 74 extern double sinh __P((double)); 75 extern double tanh __P((double)); 76 77 extern double exp __P((double)); 78 extern double frexp __P((double, int *)); 79 extern double ldexp __P((double, int)); 80 extern double log __P((double)); 81 extern double log10 __P((double)); 82 extern double modf __P((double, double *)); 83 84 extern double pow __P((double, double)); 85 extern double sqrt __P((double)); 86 87 extern double ceil __P((double)); 88 extern double fabs __P((double)); 89 extern double floor __P((double)); 90 extern double fmod __P((double, double)); 91 92 #if defined(__MATHERR_ERRNO_DONTCARE) 93 #pragma does_not_read_global_data(acos, asin, atan, atan2) 94 #pragma does_not_read_global_data(cos, sin, tan, cosh, sinh, tanh) 95 #pragma does_not_read_global_data(exp, log, log10, pow, sqrt) 96 #pragma does_not_read_global_data(frexp, ldexp, modf) 97 #pragma does_not_read_global_data(ceil, fabs, floor, fmod) 98 #pragma does_not_write_global_data(acos, asin, atan, atan2) 99 #pragma does_not_write_global_data(cos, sin, tan, cosh, sinh, tanh) 100 #pragma does_not_write_global_data(exp, log, log10, pow, sqrt) 101 #pragma does_not_write_global_data(ldexp) 102 #pragma does_not_write_global_data(ceil, fabs, floor, fmod) 103 #pragma no_side_effect(acos, asin, atan, atan2) 104 #pragma no_side_effect(cos, sin, tan, cosh, sinh, tanh) 105 #pragma no_side_effect(exp, log, log10, pow, sqrt) 106 #pragma no_side_effect(ldexp) 107 #pragma no_side_effect(ceil, fabs, floor, fmod) 108 #endif 109 110 #if __cplusplus >= 199711L 111 extern float __acosf(float); 112 extern float __asinf(float); 113 extern float __atanf(float); 114 extern float __atan2f(float, float); 115 extern float __ceilf(float); 116 extern float __cosf(float); 117 extern float __coshf(float); 118 extern float __expf(float); 119 extern float __fabsf(float); 120 extern float __floorf(float); 121 extern float __fmodf(float, float); 122 extern float __frexpf(float, int *); 123 extern float __ldexpf(float, int); 124 extern float __logf(float); 125 extern float __log10f(float); 126 extern float __modff(float, float *); 127 extern float __powf(float, float); 128 extern float __sinf(float); 129 extern float __sinhf(float); 130 extern float __sqrtf(float); 131 extern float __tanf(float); 132 extern float __tanhf(float); 133 134 extern long double __acosl(long double); 135 extern long double __asinl(long double); 136 extern long double __atanl(long double); 137 extern long double __atan2l(long double, long double); 138 extern long double __ceill(long double); 139 extern long double __cosl(long double); 140 extern long double __coshl(long double); 141 extern long double __expl(long double); 142 extern long double __fabsl(long double); 143 extern long double __floorl(long double); 144 extern long double __fmodl(long double, long double); 145 extern long double __frexpl(long double, int *); 146 extern long double __ldexpl(long double, int); 147 extern long double __logl(long double); 148 extern long double __log10l(long double); 149 extern long double __modfl(long double, long double *); 150 extern long double __powl(long double, long double); 151 extern long double __sinl(long double); 152 extern long double __sinhl(long double); 153 extern long double __sqrtl(long double); 154 extern long double __tanl(long double); 155 extern long double __tanhl(long double); 156 157 extern "C++" { 158 #undef __X 159 #undef __Y abs(double __X)160 inline double abs(double __X) { return fabs(__X); } pow(double __X,int __Y)161 inline double pow(double __X, int __Y) { return 162 pow(__X, (double) (__Y)); } 163 abs(float __X)164 inline float abs(float __X) { return __fabsf(__X); } acos(float __X)165 inline float acos(float __X) { return __acosf(__X); } asin(float __X)166 inline float asin(float __X) { return __asinf(__X); } atan(float __X)167 inline float atan(float __X) { return __atanf(__X); } atan2(float __X,float __Y)168 inline float atan2(float __X, float __Y) { return __atan2f(__X, __Y); } ceil(float __X)169 inline float ceil(float __X) { return __ceilf(__X); } cos(float __X)170 inline float cos(float __X) { return __cosf(__X); } cosh(float __X)171 inline float cosh(float __X) { return __coshf(__X); } exp(float __X)172 inline float exp(float __X) { return __expf(__X); } fabs(float __X)173 inline float fabs(float __X) { return __fabsf(__X); } floor(float __X)174 inline float floor(float __X) { return __floorf(__X); } fmod(float __X,float __Y)175 inline float fmod(float __X, float __Y) { return __fmodf(__X, __Y); } frexp(float __X,int * __Y)176 inline float frexp(float __X, int *__Y) { return __frexpf(__X, __Y); } ldexp(float __X,int __Y)177 inline float ldexp(float __X, int __Y) { return __ldexpf(__X, __Y); } log(float __X)178 inline float log(float __X) { return __logf(__X); } log10(float __X)179 inline float log10(float __X) { return __log10f(__X); } modf(float __X,float * __Y)180 inline float modf(float __X, float *__Y) { return __modff(__X, __Y); } pow(float __X,float __Y)181 inline float pow(float __X, float __Y) { return __powf(__X, __Y); } pow(float __X,int __Y)182 inline float pow(float __X, int __Y) { return 183 pow((double) (__X), (double) (__Y)); } sin(float __X)184 inline float sin(float __X) { return __sinf(__X); } sinh(float __X)185 inline float sinh(float __X) { return __sinhf(__X); } sqrt(float __X)186 inline float sqrt(float __X) { return __sqrtf(__X); } tan(float __X)187 inline float tan(float __X) { return __tanf(__X); } tanh(float __X)188 inline float tanh(float __X) { return __tanhf(__X); } 189 abs(long double __X)190 inline long double abs(long double __X) { return __fabsl(__X); } acos(long double __X)191 inline long double acos(long double __X) { return __acosl(__X); } asin(long double __X)192 inline long double asin(long double __X) { return __asinl(__X); } atan(long double __X)193 inline long double atan(long double __X) { return __atanl(__X); } atan2(long double __X,long double __Y)194 inline long double atan2(long double __X, long double __Y) { return 195 __atan2l(__X, __Y); } ceil(long double __X)196 inline long double ceil(long double __X) { return __ceill(__X); } cos(long double __X)197 inline long double cos(long double __X) { return __cosl(__X); } cosh(long double __X)198 inline long double cosh(long double __X) { return __coshl(__X); } exp(long double __X)199 inline long double exp(long double __X) { return __expl(__X); } fabs(long double __X)200 inline long double fabs(long double __X) { return __fabsl(__X); } floor(long double __X)201 inline long double floor(long double __X) { return __floorl(__X); } fmod(long double __X,long double __Y)202 inline long double fmod(long double __X, long double __Y) { return 203 __fmodl(__X, __Y); } frexp(long double __X,int * __Y)204 inline long double frexp(long double __X, int *__Y) { return 205 __frexpl(__X, __Y); } ldexp(long double __X,int __Y)206 inline long double ldexp(long double __X, int __Y) { return 207 __ldexpl(__X, __Y); } log(long double __X)208 inline long double log(long double __X) { return __logl(__X); } log10(long double __X)209 inline long double log10(long double __X) { return __log10l(__X); } modf(long double __X,long double * __Y)210 inline long double modf(long double __X, long double *__Y) { return 211 __modfl(__X, __Y); } pow(long double __X,long double __Y)212 inline long double pow(long double __X, long double __Y) { return 213 __powl(__X, __Y); } pow(long double __X,int __Y)214 inline long double pow(long double __X, int __Y) { return 215 __powl(__X, (long double) (__Y)); } sin(long double __X)216 inline long double sin(long double __X) { return __sinl(__X); } sinh(long double __X)217 inline long double sinh(long double __X) { return __sinhl(__X); } sqrt(long double __X)218 inline long double sqrt(long double __X) { return __sqrtl(__X); } tan(long double __X)219 inline long double tan(long double __X) { return __tanl(__X); } tanh(long double __X)220 inline long double tanh(long double __X) { return __tanhl(__X); } 221 } /* end of extern "C++" */ 222 #endif /* __cplusplus >= 199711L */ 223 224 #if __cplusplus >= 199711L 225 } /* end of namespace std */ 226 #endif 227 228 #ifdef __cplusplus 229 } 230 #endif 231 232 #endif /* _ISO_MATH_ISO_H */ 233