| 1 | /** | 
 
 
 
 
 | 2 | * This file has no copyright assigned and is placed in the Public Domain. | 
 
 
 
 
 | 3 | * This file is part of the mingw-w64 runtime package. | 
 
 
 
 
 | 4 | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
 
 
 
 
 | 5 | */ | 
 
 
 
 
 | 6 | #ifndef _MATH_H_ | 
 
 
 
 
 | 7 | #define _MATH_H_ | 
 
 
 
 
 | 8 |  | 
 
 
 
 
 | 9 | #ifdef __GNUC__ | 
 
 
 
 
 | 10 | #pragma GCC system_header | 
 
 
 
 
 | 11 | #endif /* __GNUC__ */ | 
 
 
 
 
 | 12 |  | 
 
 
 
 
 | 13 | #include <crtdefs.h> | 
 
 
 
 
 | 14 |  | 
 
 
 
 
 | 15 | struct _exception; | 
 
 
 
 
 | 16 |  | 
 
 
 
 
 | 17 | #pragma pack(push,_CRT_PACKING) | 
 
 
 
 
 | 18 |  | 
 
 
 
 
 | 19 | #define _DOMAIN         1       /* domain error in argument */ | 
 
 
 
 
 | 20 | #define _SING           2       /* singularity */ | 
 
 
 
 
 | 21 | #define _OVERFLOW       3       /* range overflow */ | 
 
 
 
 
 | 22 | #define _UNDERFLOW      4       /* range underflow */ | 
 
 
 
 
 | 23 | #define _TLOSS          5       /* total loss of precision */ | 
 
 
 
 
 | 24 | #define _PLOSS          6       /* partial loss of precision */ | 
 
 
 
 
 | 25 |  | 
 
 
 
 
 | 26 | #ifndef __STRICT_ANSI__ | 
 
 
 
 
 | 27 | #ifndef NO_OLDNAMES | 
 
 
 
 
 | 28 |  | 
 
 
 
 
 | 29 | #define DOMAIN          _DOMAIN | 
 
 
 
 
 | 30 | #define SING            _SING | 
 
 
 
 
 | 31 | #define OVERFLOW        _OVERFLOW | 
 
 
 
 
 | 32 | #define UNDERFLOW       _UNDERFLOW | 
 
 
 
 
 | 33 | #define TLOSS           _TLOSS | 
 
 
 
 
 | 34 | #define PLOSS           _PLOSS | 
 
 
 
 
 | 35 |  | 
 
 
 
 
 | 36 | #endif | 
 
 
 
 
 | 37 | #endif | 
 
 
 
 
 | 38 |  | 
 
 
 
 
 | 39 | #if !defined(__STRICT_ANSI__) || defined(_POSIX_C_SOURCE) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_USE_MATH_DEFINES) | 
 
 
 
 
 | 40 | #define M_E             2.7182818284590452354 | 
 
 
 
 
 | 41 | #define M_LOG2E         1.4426950408889634074 | 
 
 
 
 
 | 42 | #define M_LOG10E        0.43429448190325182765 | 
 
 
 
 
 | 43 | #define M_LN2           0.69314718055994530942 | 
 
 
 
 
 | 44 | #define M_LN10          2.30258509299404568402 | 
 
 
 
 
 | 45 | #define M_PI            3.14159265358979323846 | 
 
 
 
 
 | 46 | #define M_PI_2          1.57079632679489661923 | 
 
 
 
 
 | 47 | #define M_PI_4          0.78539816339744830962 | 
 
 
 
 
 | 48 | #define M_1_PI          0.31830988618379067154 | 
 
 
 
 
 | 49 | #define M_2_PI          0.63661977236758134308 | 
 
 
 
 
 | 50 | #define M_2_SQRTPI      1.12837916709551257390 | 
 
 
 
 
 | 51 | #define M_SQRT2         1.41421356237309504880 | 
 
 
 
 
 | 52 | #define M_SQRT1_2       0.70710678118654752440 | 
 
 
 
 
 | 53 | #endif | 
 
 
 
 
 | 54 |  | 
 
 
 
 
 | 55 | #ifndef __STRICT_ANSI__ | 
 
 
 
 
 | 56 | /* See also float.h  */ | 
 
 
 
 
 | 57 | #ifndef __MINGW_FPCLASS_DEFINED | 
 
 
 
 
 | 58 | #define __MINGW_FPCLASS_DEFINED 1 | 
 
 
 
 
 | 59 | /* IEEE 754 classication */ | 
 
 
 
 
 | 60 | #define _FPCLASS_SNAN   0x0001  /* Signaling "Not a Number" */ | 
 
 
 
 
 | 61 | #define _FPCLASS_QNAN   0x0002  /* Quiet "Not a Number" */ | 
 
 
 
 
 | 62 | #define _FPCLASS_NINF   0x0004  /* Negative Infinity */ | 
 
 
 
 
 | 63 | #define _FPCLASS_NN     0x0008  /* Negative Normal */ | 
 
 
 
 
 | 64 | #define _FPCLASS_ND     0x0010  /* Negative Denormal */ | 
 
 
 
 
 | 65 | #define _FPCLASS_NZ     0x0020  /* Negative Zero */ | 
 
 
 
 
 | 66 | #define _FPCLASS_PZ     0x0040  /* Positive Zero */ | 
 
 
 
 
 | 67 | #define _FPCLASS_PD     0x0080  /* Positive Denormal */ | 
 
 
 
 
 | 68 | #define _FPCLASS_PN     0x0100  /* Positive Normal */ | 
 
 
 
 
 | 69 | #define _FPCLASS_PINF   0x0200  /* Positive Infinity */ | 
 
 
 
 
 | 70 | #endif | 
 
 
 
 
 | 71 | #endif | 
 
 
 
 
 | 72 |  | 
 
 
 
 
 | 73 | #ifndef RC_INVOKED | 
 
 
 
 
 | 74 |  | 
 
 
 
 
 | 75 | #ifndef __mingw_types_compatible_p | 
 
 
 
 
 | 76 | #ifdef __cplusplus | 
 
 
 
 
 | 77 | extern "C++" { | 
 
 
 
 
 | 78 | template <typename type1, typename type2> struct __mingw_types_compatible_p { | 
 
 
 
 
 | 79 | static const bool result = false; | 
 
 
 
 
 | 80 | }; | 
 
 
 
 
 | 81 |  | 
 
 
 
 
 | 82 | template <typename type1> struct __mingw_types_compatible_p<type1, type1> { | 
 
 
 
 
 | 83 | static const bool result = true; | 
 
 
 
 
 | 84 | }; | 
 
 
 
 
 | 85 |  | 
 
 
 
 
 | 86 | template <typename type1> struct __mingw_types_compatible_p<const type1, type1> { | 
 
 
 
 
 | 87 | static const bool result = true; | 
 
 
 
 
 | 88 | }; | 
 
 
 
 
 | 89 |  | 
 
 
 
 
 | 90 | template <typename type1> struct __mingw_types_compatible_p<type1, const type1> { | 
 
 
 
 
 | 91 | static const bool result = true; | 
 
 
 
 
 | 92 | }; | 
 
 
 
 
 | 93 | } | 
 
 
 
 
 | 94 |  | 
 
 
 
 
 | 95 | #define __mingw_types_compatible_p(type1, type2) __mingw_types_compatible_p <type1, type2>::result | 
 
 
 
 
 | 96 | #else | 
 
 
 
 
 | 97 | #define __mingw_types_compatible_p(type1, type2) __builtin_types_compatible_p (type1, type2) | 
 
 
 
 
 | 98 | #endif | 
 
 
 
 
 | 99 | #endif | 
 
 
 
 
 | 100 |  | 
 
 
 
 
 | 101 | #ifndef __mingw_choose_expr | 
 
 
 
 
 | 102 | #ifdef __cplusplus | 
 
 
 
 
 | 103 | #define __mingw_choose_expr(C, E1, E2) ((C) ? E1 : E2) | 
 
 
 
 
 | 104 | #else | 
 
 
 
 
 | 105 | #define __mingw_choose_expr __builtin_choose_expr | 
 
 
 
 
 | 106 | #endif | 
 
 
 
 
 | 107 | #endif | 
 
 
 
 
 | 108 |  | 
 
 
 
 
 | 109 |  | 
 
 
 
 
 | 110 | #ifdef __cplusplus | 
 
 
 
 
 | 111 | extern "C" { | 
 
 
 
 
 | 112 | #endif | 
 
 
 
 
 | 113 |  | 
 
 
 
 
 | 114 | #ifndef __MINGW_SOFTMATH | 
 
 
 
 
 | 115 | #define __MINGW_SOFTMATH | 
 
 
 
 
 | 116 |  | 
 
 
 
 
 | 117 | /* IEEE float/double type shapes.  */ | 
 
 
 
 
 | 118 |  | 
 
 
 
 
 | 119 | typedef union __mingw_dbl_type_t { | 
 
 
 
 
 | 120 | double x; | 
 
 
 
 
 | 121 | unsigned long long val; | 
 
 
 
 
 | 122 | __C89_NAMELESS struct { | 
 
 
 
 
 | 123 | unsigned int low, high; | 
 
 
 
 
 | 124 | } lh; | 
 
 
 
 
 | 125 | } __mingw_dbl_type_t; | 
 
 
 
 
 | 126 |  | 
 
 
 
 
 | 127 | typedef union __mingw_flt_type_t { | 
 
 
 
 
 | 128 | float x; | 
 
 
 
 
 | 129 | unsigned int val; | 
 
 
 
 
 | 130 | } __mingw_flt_type_t; | 
 
 
 
 
 | 131 |  | 
 
 
 
 
 | 132 | typedef union __mingw_ldbl_type_t | 
 
 
 
 
 | 133 | { | 
 
 
 
 
 | 134 | long double x; | 
 
 
 
 
 | 135 | __C89_NAMELESS struct { | 
 
 
 
 
 | 136 | unsigned int low, high; | 
 
 
 
 
 | 137 | int sign_exponent : 16; | 
 
 
 
 
 | 138 | int res1 : 16; | 
 
 
 
 
 | 139 | int res0 : 32; | 
 
 
 
 
 | 140 | } lh; | 
 
 
 
 
 | 141 | } __mingw_ldbl_type_t; | 
 
 
 
 
 | 142 |  | 
 
 
 
 
 | 143 | #endif | 
 
 
 
 
 | 144 |  | 
 
 
 
 
 | 145 | #ifndef _HUGE | 
 
 
 
 
 | 146 | #ifdef _UCRT | 
 
 
 
 
 | 147 | extern double const _HUGE; | 
 
 
 
 
 | 148 | #define _HUGE _HUGE | 
 
 
 
 
 | 149 | #else | 
 
 
 
 
 | 150 | extern double * __MINGW_IMP_SYMBOL(_HUGE); | 
 
 
 
 
 | 151 | #define _HUGE   (* __MINGW_IMP_SYMBOL(_HUGE)) | 
 
 
 
 
 | 152 | #endif /* _UCRT */ | 
 
 
 
 
 | 153 | #endif | 
 
 
 
 
 | 154 |  | 
 
 
 
 
 | 155 | #ifdef __GNUC__ | 
 
 
 
 
 | 156 | #define HUGE_VAL __builtin_huge_val() | 
 
 
 
 
 | 157 | #else | 
 
 
 
 
 | 158 | #define HUGE_VAL _HUGE | 
 
 
 
 
 | 159 | #endif /* __GNUC__ */ | 
 
 
 
 
 | 160 |  | 
 
 
 
 
 | 161 | #ifndef _EXCEPTION_DEFINED | 
 
 
 
 
 | 162 | #define _EXCEPTION_DEFINED | 
 
 
 
 
 | 163 | struct _exception { | 
 
 
 
 
 | 164 | int type; | 
 
 
 
 
 | 165 | const char *name; | 
 
 
 
 
 | 166 | double arg1; | 
 
 
 
 
 | 167 | double arg2; | 
 
 
 
 
 | 168 | double retval; | 
 
 
 
 
 | 169 | }; | 
 
 
 
 
 | 170 |  | 
 
 
 
 
 | 171 | void __mingw_raise_matherr (int typ, const char *name, double a1, double a2, | 
 
 
 
 
 | 172 | double rslt); | 
 
 
 
 
 | 173 | void __mingw_setusermatherr (int (__cdecl *)(struct _exception *)); | 
 
 
 
 
 | 174 | _CRTIMP void __setusermatherr(int (__cdecl *)(struct _exception *)); | 
 
 
 
 
 | 175 | #define __setusermatherr __mingw_setusermatherr | 
 
 
 
 
 | 176 | #endif | 
 
 
 
 
 | 177 |  | 
 
 
 
 
 | 178 | double __cdecl sin(double _X); | 
 
 
 
 
 | 179 | double __cdecl cos(double _X); | 
 
 
 
 
 | 180 | double __cdecl tan(double _X); | 
 
 
 
 
 | 181 | double __cdecl sinh(double _X); | 
 
 
 
 
 | 182 | double __cdecl cosh(double _X); | 
 
 
 
 
 | 183 | double __cdecl tanh(double _X); | 
 
 
 
 
 | 184 | double __cdecl asin(double _X); | 
 
 
 
 
 | 185 | double __cdecl acos(double _X); | 
 
 
 
 
 | 186 | double __cdecl atan(double _X); | 
 
 
 
 
 | 187 | double __cdecl atan2(double _Y,double _X); | 
 
 
 
 
 | 188 | double __cdecl exp(double _X); | 
 
 
 
 
 | 189 | double __cdecl log(double _X); | 
 
 
 
 
 | 190 | double __cdecl log10(double _X); | 
 
 
 
 
 | 191 | double __cdecl pow(double _X,double _Y); | 
 
 
 
 
 | 192 | double __cdecl sqrt(double _X); | 
 
 
 
 
 | 193 | double __cdecl ceil(double _X); | 
 
 
 
 
 | 194 | double __cdecl floor(double _X); | 
 
 
 
 
 | 195 |  | 
 
 
 
 
 | 196 | /* 7.12.7.2 The fabs functions: Double in C89 */ | 
 
 
 
 
 | 197 | extern  float __cdecl fabsf (float x); | 
 
 
 
 
 | 198 | extern long double __cdecl fabsl (long double); | 
 
 
 
 
 | 199 | extern double __cdecl fabs (double _X); | 
 
 
 
 
 | 200 |  | 
 
 
 
 
 | 201 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 202 | #if !defined (__ia64__) | 
 
 
 
 
 | 203 | __CRT_INLINE float __cdecl fabsf (float x) | 
 
 
 
 
 | 204 | { | 
 
 
 
 
 | 205 | #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) | 
 
 
 
 
 | 206 | return __builtin_fabsf (x); | 
 
 
 
 
 | 207 | #else | 
 
 
 
 
 | 208 | float res = 0.0F; | 
 
 
 
 
 | 209 | __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x)); | 
 
 
 
 
 | 210 | return res; | 
 
 
 
 
 | 211 | #endif | 
 
 
 
 
 | 212 | } | 
 
 
 
 
 | 213 |  | 
 
 
 
 
 | 214 | __CRT_INLINE long double __cdecl fabsl (long double x) | 
 
 
 
 
 | 215 | { | 
 
 
 
 
 | 216 | #if defined(__arm__) || defined(__aarch64__) | 
 
 
 
 
 | 217 | return __builtin_fabsl (x); | 
 
 
 
 
 | 218 | #else | 
 
 
 
 
 | 219 | long double res = 0.0l; | 
 
 
 
 
 | 220 | __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x)); | 
 
 
 
 
 | 221 | return res; | 
 
 
 
 
 | 222 | #endif | 
 
 
 
 
 | 223 | } | 
 
 
 
 
 | 224 |  | 
 
 
 
 
 | 225 | __CRT_INLINE double __cdecl fabs (double x) | 
 
 
 
 
 | 226 | { | 
 
 
 
 
 | 227 | #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) | 
 
 
 
 
 | 228 | return __builtin_fabs (x); | 
 
 
 
 
 | 229 | #else | 
 
 
 
 
 | 230 | double res = 0.0; | 
 
 
 
 
 | 231 | __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x)); | 
 
 
 
 
 | 232 | return res; | 
 
 
 
 
 | 233 | #endif | 
 
 
 
 
 | 234 | } | 
 
 
 
 
 | 235 | #endif | 
 
 
 
 
 | 236 | #endif | 
 
 
 
 
 | 237 |  | 
 
 
 
 
 | 238 | double __cdecl ldexp(double _X,int _Y); | 
 
 
 
 
 | 239 | double __cdecl frexp(double _X,int *_Y); | 
 
 
 
 
 | 240 | double __cdecl modf(double _X,double *_Y); | 
 
 
 
 
 | 241 | double __cdecl fmod(double _X,double _Y); | 
 
 
 
 
 | 242 |  | 
 
 
 
 
 | 243 | void __cdecl sincos (double __x, double *p_sin, double *p_cos); | 
 
 
 
 
 | 244 | void __cdecl sincosl (long double __x, long double *p_sin, long double *p_cos); | 
 
 
 
 
 | 245 | void __cdecl sincosf (float __x, float *p_sin, float *p_cos); | 
 
 
 
 
 | 246 |  | 
 
 
 
 
 | 247 | #ifndef _CRT_ABS_DEFINED | 
 
 
 
 
 | 248 | #define _CRT_ABS_DEFINED | 
 
 
 
 
 | 249 | int __cdecl abs(int _X); | 
 
 
 
 
 | 250 | long __cdecl labs(long _X); | 
 
 
 
 
 | 251 | #endif | 
 
 
 
 
 | 252 | #ifndef _CRT_ATOF_DEFINED | 
 
 
 
 
 | 253 | #define _CRT_ATOF_DEFINED | 
 
 
 
 
 | 254 | double __cdecl atof(const char *_String); | 
 
 
 
 
 | 255 | double __cdecl _atof_l(const char *_String,_locale_t _Locale); | 
 
 
 
 
 | 256 | #endif | 
 
 
 
 
 | 257 |  | 
 
 
 
 
 | 258 | #define EDOM 33 | 
 
 
 
 
 | 259 | #define ERANGE 34 | 
 
 
 
 
 | 260 |  | 
 
 
 
 
 | 261 | #if !defined(__STRICT_ANSI__) || defined(_POSIX_C_SOURCE) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 
 
 
 
 
 | 262 |  | 
 
 
 
 
 | 263 | #ifndef _COMPLEX_DEFINED | 
 
 
 
 
 | 264 | #define _COMPLEX_DEFINED | 
 
 
 
 
 | 265 | struct _complex { | 
 
 
 
 
 | 266 | double x; | 
 
 
 
 
 | 267 | double y; | 
 
 
 
 
 | 268 | }; | 
 
 
 
 
 | 269 | #endif | 
 
 
 
 
 | 270 |  | 
 
 
 
 
 | 271 | double __cdecl _cabs(struct _complex _ComplexA); /* Overridden to use our cabs.  */ | 
 
 
 
 
 | 272 | double __cdecl _hypot(double _X,double _Y); | 
 
 
 
 
 | 273 | _CRTIMP double __cdecl _j0(double _X); | 
 
 
 
 
 | 274 | _CRTIMP double __cdecl _j1(double _X); | 
 
 
 
 
 | 275 | _CRTIMP double __cdecl _jn(int _X,double _Y); | 
 
 
 
 
 | 276 | _CRTIMP double __cdecl _y0(double _X); | 
 
 
 
 
 | 277 | _CRTIMP double __cdecl _y1(double _X); | 
 
 
 
 
 | 278 | _CRTIMP double __cdecl _yn(int _X,double _Y); | 
 
 
 
 
 | 279 | #ifndef _CRT_MATHERR_DEFINED | 
 
 
 
 
 | 280 | #define _CRT_MATHERR_DEFINED | 
 
 
 
 
 | 281 | _CRTIMP int __cdecl _matherr (struct _exception *); | 
 
 
 
 
 | 282 | #endif | 
 
 
 
 
 | 283 |  | 
 
 
 
 
 | 284 | /* These are also declared in Mingw float.h; needed here as well to work | 
 
 
 
 
 | 285 | around GCC build issues.  */ | 
 
 
 
 
 | 286 | /* BEGIN FLOAT.H COPY */ | 
 
 
 
 
 | 287 | /* | 
 
 
 
 
 | 288 | * IEEE recommended functions | 
 
 
 
 
 | 289 | */ | 
 
 
 
 
 | 290 | #ifndef _SIGN_DEFINED | 
 
 
 
 
 | 291 | #define _SIGN_DEFINED | 
 
 
 
 
 | 292 | _CRTIMP double __cdecl _chgsign (double _X); | 
 
 
 
 
 | 293 | _CRTIMP double __cdecl _copysign (double _Number,double _Sign); | 
 
 
 
 
 | 294 | _CRTIMP double __cdecl _logb (double); | 
 
 
 
 
 | 295 | _CRTIMP double __cdecl _nextafter (double, double); | 
 
 
 
 
 | 296 | _CRTIMP double __cdecl _scalb (double, long); | 
 
 
 
 
 | 297 | _CRTIMP int __cdecl _finite (double); | 
 
 
 
 
 | 298 | _CRTIMP int __cdecl _fpclass (double); | 
 
 
 
 
 | 299 | _CRTIMP int __cdecl _isnan (double); | 
 
 
 
 
 | 300 | #endif | 
 
 
 
 
 | 301 |  | 
 
 
 
 
 | 302 | /* END FLOAT.H COPY */ | 
 
 
 
 
 | 303 |  | 
 
 
 
 
 | 304 | #if !defined(NO_OLDNAMES) | 
 
 
 
 
 | 305 |  | 
 
 
 
 
 | 306 | _CRTIMP double __cdecl j0 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; | 
 
 
 
 
 | 307 | _CRTIMP double __cdecl j1 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; | 
 
 
 
 
 | 308 | _CRTIMP double __cdecl jn (int, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; | 
 
 
 
 
 | 309 | _CRTIMP double __cdecl y0 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; | 
 
 
 
 
 | 310 | _CRTIMP double __cdecl y1 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; | 
 
 
 
 
 | 311 | _CRTIMP double __cdecl yn (int, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; | 
 
 
 
 
 | 312 |  | 
 
 
 
 
 | 313 | _CRTIMP double __cdecl chgsign (double); | 
 
 
 
 
 | 314 | /* | 
 
 
 
 
 | 315 | * scalb() is a GCC built-in. | 
 
 
 
 
 | 316 | * Exclude this _scalb() stub; the semantics are incompatible | 
 
 
 
 
 | 317 | * with the built-in implementation. | 
 
 
 
 
 | 318 | * | 
 
 
 
 
 | 319 | _CRTIMP double __cdecl scalb (double, long); | 
 
 
 
 
 | 320 | * | 
 
 
 
 
 | 321 | */ | 
 
 
 
 
 | 322 | _CRTIMP int __cdecl finite (double); | 
 
 
 
 
 | 323 | _CRTIMP int __cdecl fpclass (double); | 
 
 
 
 
 | 324 |  | 
 
 
 
 
 | 325 | #define FP_SNAN    _FPCLASS_SNAN | 
 
 
 
 
 | 326 | #define FP_QNAN    _FPCLASS_QNAN | 
 
 
 
 
 | 327 | #define FP_NINF    _FPCLASS_NINF | 
 
 
 
 
 | 328 | #define FP_PINF    _FPCLASS_PINF | 
 
 
 
 
 | 329 | #define FP_NDENORM _FPCLASS_ND | 
 
 
 
 
 | 330 | #define FP_PDENORM _FPCLASS_PD | 
 
 
 
 
 | 331 | #define FP_NZERO   _FPCLASS_NZ | 
 
 
 
 
 | 332 | #define FP_PZERO   _FPCLASS_PZ | 
 
 
 
 
 | 333 | #define FP_NNORM   _FPCLASS_NN | 
 
 
 
 
 | 334 | #define FP_PNORM   _FPCLASS_PN | 
 
 
 
 
 | 335 |  | 
 
 
 
 
 | 336 | #endif /* !defined (_NO_OLDNAMES) && !define (NO_OLDNAMES) */ | 
 
 
 
 
 | 337 |  | 
 
 
 
 
 | 338 | #if(defined(_X86_) && !defined(__x86_64)) | 
 
 
 
 
 | 339 | _CRTIMP int __cdecl _set_SSE2_enable(int _Flag); | 
 
 
 
 
 | 340 | #endif | 
 
 
 
 
 | 341 |  | 
 
 
 
 
 | 342 | #endif | 
 
 
 
 
 | 343 |  | 
 
 
 
 
 | 344 | #ifndef __NO_ISOCEXT | 
 
 
 
 
 | 345 | #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ | 
 
 
 
 
 | 346 | || !defined __STRICT_ANSI__ || defined __cplusplus | 
 
 
 
 
 | 347 |  | 
 
 
 
 
 | 348 | #ifdef __GNUC__ | 
 
 
 
 
 | 349 | #define HUGE_VALF       __builtin_huge_valf() | 
 
 
 
 
 | 350 | #define HUGE_VALL       __builtin_huge_vall() | 
 
 
 
 
 | 351 | #define INFINITY        __builtin_inff() | 
 
 
 
 
 | 352 | #define NAN             __builtin_nanf("") | 
 
 
 
 
 | 353 | #else | 
 
 
 
 
 | 354 | extern const float __INFF; | 
 
 
 
 
 | 355 | #define HUGE_VALF __INFF | 
 
 
 
 
 | 356 | extern const long double  __INFL; | 
 
 
 
 
 | 357 | #define HUGE_VALL __INFL | 
 
 
 
 
 | 358 | #define INFINITY HUGE_VALF | 
 
 
 
 
 | 359 | extern const double __QNANF; | 
 
 
 
 
 | 360 | #define NAN __QNANF | 
 
 
 
 
 | 361 | #endif /* __GNUC__ */ | 
 
 
 
 
 | 362 |  | 
 
 
 
 
 | 363 | /* Use the compiler's builtin define for FLT_EVAL_METHOD to | 
 
 
 
 
 | 364 | set float_t and double_t.  */ | 
 
 
 
 
 | 365 | #if defined (__x86_64__) || defined(__FLT_EVAL_METHOD__) | 
 
 
 
 
 | 366 | # if defined (__x86_64__) || ( __FLT_EVAL_METHOD__== 0) | 
 
 
 
 
 | 367 | typedef float float_t; | 
 
 
 
 
 | 368 | typedef double double_t; | 
 
 
 
 
 | 369 | # elif (__FLT_EVAL_METHOD__ == 1) | 
 
 
 
 
 | 370 | typedef double float_t; | 
 
 
 
 
 | 371 | typedef double double_t; | 
 
 
 
 
 | 372 | # else /* (__FLT_EVAL_METHOD__ == 2) default ix87 FPU */ | 
 
 
 
 
 | 373 | typedef long double float_t; | 
 
 
 
 
 | 374 | typedef long double double_t; | 
 
 
 
 
 | 375 | #endif | 
 
 
 
 
 | 376 | #else /* ix87 FPU default */ | 
 
 
 
 
 | 377 | typedef long double float_t; | 
 
 
 
 
 | 378 | typedef long double double_t; | 
 
 
 
 
 | 379 | #endif | 
 
 
 
 
 | 380 |  | 
 
 
 
 
 | 381 | /* 7.12.3.1 */ | 
 
 
 
 
 | 382 | /* | 
 
 
 
 
 | 383 | Return values for fpclassify. | 
 
 
 
 
 | 384 | These are based on Intel x87 fpu condition codes | 
 
 
 
 
 | 385 | in the high byte of status word and differ from | 
 
 
 
 
 | 386 | the return values for MS IEEE 754 extension _fpclass() | 
 
 
 
 
 | 387 | */ | 
 
 
 
 
 | 388 | #define FP_NAN          0x0100 | 
 
 
 
 
 | 389 | #define FP_NORMAL       0x0400 | 
 
 
 
 
 | 390 | #define FP_INFINITE     (FP_NAN | FP_NORMAL) | 
 
 
 
 
 | 391 | #define FP_ZERO         0x4000 | 
 
 
 
 
 | 392 | #define FP_SUBNORMAL    (FP_NORMAL | FP_ZERO) | 
 
 
 
 
 | 393 | /* 0x0200 is signbit mask */ | 
 
 
 
 
 | 394 |  | 
 
 
 
 
 | 395 | /* | 
 
 
 
 
 | 396 | We can't inline float or double, because we want to ensure truncation | 
 
 
 
 
 | 397 | to semantic type before classification. | 
 
 
 
 
 | 398 | (A normal long double value might become subnormal when | 
 
 
 
 
 | 399 | converted to double, and zero when converted to float.) | 
 
 
 
 
 | 400 | */ | 
 
 
 
 
 | 401 |  | 
 
 
 
 
 | 402 | extern int __cdecl __fpclassifyl (long double); | 
 
 
 
 
 | 403 | extern int __cdecl __fpclassifyf (float); | 
 
 
 
 
 | 404 | extern int __cdecl __fpclassify (double); | 
 
 
 
 
 | 405 |  | 
 
 
 
 
 | 406 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 407 | __CRT_INLINE int __cdecl __fpclassifyl (long double x) { | 
 
 
 
 
 | 408 | #if defined(__x86_64__) || defined(_AMD64_) | 
 
 
 
 
 | 409 | __mingw_ldbl_type_t hlp; | 
 
 
 
 
 | 410 | unsigned int e; | 
 
 
 
 
 | 411 | hlp.x = x; | 
 
 
 
 
 | 412 | e = hlp.lh.sign_exponent & 0x7fff; | 
 
 
 
 
 | 413 | if (!e) | 
 
 
 
 
 | 414 | { | 
 
 
 
 
 | 415 | unsigned int h = hlp.lh.high; | 
 
 
 
 
 | 416 | if (!(hlp.lh.low | h)) | 
 
 
 
 
 | 417 | return FP_ZERO; | 
 
 
 
 
 | 418 | else if (!(h & 0x80000000)) | 
 
 
 
 
 | 419 | return FP_SUBNORMAL; | 
 
 
 
 
 | 420 | } | 
 
 
 
 
 | 421 | else if (e == 0x7fff) | 
 
 
 
 
 | 422 | return (((hlp.lh.high & 0x7fffffff) | hlp.lh.low) == 0 ? | 
 
 
 
 
 | 423 | FP_INFINITE : FP_NAN); | 
 
 
 
 
 | 424 | return FP_NORMAL; | 
 
 
 
 
 | 425 | #elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 426 | return __fpclassify(x); | 
 
 
 
 
 | 427 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 428 | unsigned short sw; | 
 
 
 
 
 | 429 | __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x)); | 
 
 
 
 
 | 430 | return sw & (FP_NAN | FP_NORMAL | FP_ZERO ); | 
 
 
 
 
 | 431 | #endif | 
 
 
 
 
 | 432 | } | 
 
 
 
 
 | 433 | __CRT_INLINE int __cdecl __fpclassify (double x) { | 
 
 
 
 
 | 434 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 435 | __mingw_dbl_type_t hlp; | 
 
 
 
 
 | 436 | unsigned int l, h; | 
 
 
 
 
 | 437 |  | 
 
 
 
 
 | 438 | hlp.x = x; | 
 
 
 
 
 | 439 | h = hlp.lh.high; | 
 
 
 
 
 | 440 | l = hlp.lh.low | (h & 0xfffff); | 
 
 
 
 
 | 441 | h &= 0x7ff00000; | 
 
 
 
 
 | 442 | if ((h | l) == 0) | 
 
 
 
 
 | 443 | return FP_ZERO; | 
 
 
 
 
 | 444 | if (!h) | 
 
 
 
 
 | 445 | return FP_SUBNORMAL; | 
 
 
 
 
 | 446 | if (h == 0x7ff00000) | 
 
 
 
 
 | 447 | return (l ? FP_NAN : FP_INFINITE); | 
 
 
 
 
 | 448 | return FP_NORMAL; | 
 
 
 
 
 | 449 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 450 | unsigned short sw; | 
 
 
 
 
 | 451 | __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x)); | 
 
 
 
 
 | 452 | return sw & (FP_NAN | FP_NORMAL | FP_ZERO ); | 
 
 
 
 
 | 453 | #endif | 
 
 
 
 
 | 454 | } | 
 
 
 
 
 | 455 | __CRT_INLINE int __cdecl __fpclassifyf (float x) { | 
 
 
 
 
 | 456 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 457 | __mingw_flt_type_t hlp; | 
 
 
 
 
 | 458 |  | 
 
 
 
 
 | 459 | hlp.x = x; | 
 
 
 
 
 | 460 | hlp.val &= 0x7fffffff; | 
 
 
 
 
 | 461 | if (hlp.val == 0) | 
 
 
 
 
 | 462 | return FP_ZERO; | 
 
 
 
 
 | 463 | if (hlp.val < 0x800000) | 
 
 
 
 
 | 464 | return FP_SUBNORMAL; | 
 
 
 
 
 | 465 | if (hlp.val >= 0x7f800000) | 
 
 
 
 
 | 466 | return (hlp.val > 0x7f800000 ? FP_NAN : FP_INFINITE); | 
 
 
 
 
 | 467 | return FP_NORMAL; | 
 
 
 
 
 | 468 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 469 | unsigned short sw; | 
 
 
 
 
 | 470 | __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x)); | 
 
 
 
 
 | 471 | return sw & (FP_NAN | FP_NORMAL | FP_ZERO ); | 
 
 
 
 
 | 472 | #endif | 
 
 
 
 
 | 473 | } | 
 
 
 
 
 | 474 | #endif | 
 
 
 
 
 | 475 |  | 
 
 
 
 
 | 476 | #ifdef __STDC_WANT_DEC_FP__ | 
 
 
 
 
 | 477 | #define __dfp_expansion(__call,__fin,x) \ | 
 
 
 
 
 | 478 | __mingw_choose_expr (                                  \ | 
 
 
 
 
 | 479 | __mingw_types_compatible_p (__typeof__ (x), _Decimal32),    \ | 
 
 
 
 
 | 480 | __call##d32(x),                                         \ | 
 
 
 
 
 | 481 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 482 | __mingw_types_compatible_p (__typeof__ (x), _Decimal64),    \ | 
 
 
 
 
 | 483 | __call##d64(x),                                         \ | 
 
 
 
 
 | 484 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 485 | __mingw_types_compatible_p (__typeof__ (x), _Decimal128),   \ | 
 
 
 
 
 | 486 | __call##d128(x),                                        \ | 
 
 
 
 
 | 487 | __fin))) | 
 
 
 
 
 | 488 | #else | 
 
 
 
 
 | 489 | #define __dfp_expansion(__call,__fin,x) __fin | 
 
 
 
 
 | 490 | #endif | 
 
 
 
 
 | 491 |  | 
 
 
 
 
 | 492 | #define fpclassify(x) \ | 
 
 
 
 
 | 493 | __mingw_choose_expr (                                         \ | 
 
 
 
 
 | 494 | __mingw_types_compatible_p (__typeof__ (x), double),            \ | 
 
 
 
 
 | 495 | __fpclassify(x),                                            \ | 
 
 
 
 
 | 496 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 497 | __mingw_types_compatible_p (__typeof__ (x), float),         \ | 
 
 
 
 
 | 498 | __fpclassifyf(x),                                       \ | 
 
 
 
 
 | 499 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 500 | __mingw_types_compatible_p (__typeof__ (x), long double),   \ | 
 
 
 
 
 | 501 | __fpclassifyl(x),                                       \ | 
 
 
 
 
 | 502 | __dfp_expansion(__fpclassify,(__builtin_trap(),0),x)))) | 
 
 
 
 
 | 503 |  | 
 
 
 
 
 | 504 |  | 
 
 
 
 
 | 505 | /* 7.12.3.2 */ | 
 
 
 
 
 | 506 | #define isfinite(x) ((fpclassify(x) & FP_NAN) == 0) | 
 
 
 
 
 | 507 |  | 
 
 
 
 
 | 508 | /* 7.12.3.3 */ | 
 
 
 
 
 | 509 | #define isinf(x) (fpclassify(x) == FP_INFINITE) | 
 
 
 
 
 | 510 |  | 
 
 
 
 
 | 511 | /* 7.12.3.4 */ | 
 
 
 
 
 | 512 | /* We don't need to worry about truncation here: | 
 
 
 
 
 | 513 | A NaN stays a NaN. */ | 
 
 
 
 
 | 514 |  | 
 
 
 
 
 | 515 | extern int __cdecl __isnan (double); | 
 
 
 
 
 | 516 | extern int __cdecl __isnanf (float); | 
 
 
 
 
 | 517 | extern int __cdecl __isnanl (long double); | 
 
 
 
 
 | 518 |  | 
 
 
 
 
 | 519 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 520 | __CRT_INLINE int __cdecl __isnan (double _x) | 
 
 
 
 
 | 521 | { | 
 
 
 
 
 | 522 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 523 | __mingw_dbl_type_t hlp; | 
 
 
 
 
 | 524 | int l, h; | 
 
 
 
 
 | 525 |  | 
 
 
 
 
 | 526 | hlp.x = _x; | 
 
 
 
 
 | 527 | l = hlp.lh.low; | 
 
 
 
 
 | 528 | h = hlp.lh.high & 0x7fffffff; | 
 
 
 
 
 | 529 | h |= (unsigned int) (l | -l) >> 31; | 
 
 
 
 
 | 530 | h = 0x7ff00000 - h; | 
 
 
 
 
 | 531 | return (int) ((unsigned int) h) >> 31; | 
 
 
 
 
 | 532 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 533 | unsigned short sw; | 
 
 
 
 
 | 534 | __asm__ __volatile__ ("fxam;" | 
 
 
 
 
 | 535 | "fstsw %%ax": "=a" (sw) : "t" (_x)); | 
 
 
 
 
 | 536 | return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL)) | 
 
 
 
 
 | 537 | == FP_NAN; | 
 
 
 
 
 | 538 | #endif | 
 
 
 
 
 | 539 | } | 
 
 
 
 
 | 540 |  | 
 
 
 
 
 | 541 | __CRT_INLINE int __cdecl __isnanf (float _x) | 
 
 
 
 
 | 542 | { | 
 
 
 
 
 | 543 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 544 | __mingw_flt_type_t hlp; | 
 
 
 
 
 | 545 | int i; | 
 
 
 
 
 | 546 |  | 
 
 
 
 
 | 547 | hlp.x = _x; | 
 
 
 
 
 | 548 | i = hlp.val & 0x7fffffff; | 
 
 
 
 
 | 549 | i = 0x7f800000 - i; | 
 
 
 
 
 | 550 | return (int) (((unsigned int) i) >> 31); | 
 
 
 
 
 | 551 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 552 | unsigned short sw; | 
 
 
 
 
 | 553 | __asm__ __volatile__ ("fxam;" | 
 
 
 
 
 | 554 | "fstsw %%ax": "=a" (sw) : "t" (_x)); | 
 
 
 
 
 | 555 | return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL)) | 
 
 
 
 
 | 556 | == FP_NAN; | 
 
 
 
 
 | 557 | #endif | 
 
 
 
 
 | 558 | } | 
 
 
 
 
 | 559 |  | 
 
 
 
 
 | 560 | __CRT_INLINE int __cdecl __isnanl (long double _x) | 
 
 
 
 
 | 561 | { | 
 
 
 
 
 | 562 | #if defined(__x86_64__) || defined(_AMD64_) | 
 
 
 
 
 | 563 | __mingw_ldbl_type_t ld; | 
 
 
 
 
 | 564 | int xx, signexp; | 
 
 
 
 
 | 565 |  | 
 
 
 
 
 | 566 | ld.x = _x; | 
 
 
 
 
 | 567 | signexp = (ld.lh.sign_exponent & 0x7fff) << 1; | 
 
 
 
 
 | 568 | xx = (int) (ld.lh.low | (ld.lh.high & 0x7fffffffu)); /* explicit */ | 
 
 
 
 
 | 569 | signexp |= (unsigned int) (xx | (-xx)) >> 31; | 
 
 
 
 
 | 570 | signexp = 0xfffe - signexp; | 
 
 
 
 
 | 571 | return (int) ((unsigned int) signexp) >> 16; | 
 
 
 
 
 | 572 | #elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 573 | return __isnan(_x); | 
 
 
 
 
 | 574 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 575 | unsigned short sw; | 
 
 
 
 
 | 576 | __asm__ __volatile__ ("fxam;" | 
 
 
 
 
 | 577 | "fstsw %%ax": "=a" (sw) : "t" (_x)); | 
 
 
 
 
 | 578 | return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL)) | 
 
 
 
 
 | 579 | == FP_NAN; | 
 
 
 
 
 | 580 | #endif | 
 
 
 
 
 | 581 | } | 
 
 
 
 
 | 582 | #endif | 
 
 
 
 
 | 583 |  | 
 
 
 
 
 | 584 |  | 
 
 
 
 
 | 585 |  | 
 
 
 
 
 | 586 | #define isnan(x) \ | 
 
 
 
 
 | 587 | __mingw_choose_expr (                                         \ | 
 
 
 
 
 | 588 | __mingw_types_compatible_p (__typeof__ (x), double),            \ | 
 
 
 
 
 | 589 | __isnan(x),                                                 \ | 
 
 
 
 
 | 590 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 591 | __mingw_types_compatible_p (__typeof__ (x), float),         \ | 
 
 
 
 
 | 592 | __isnanf(x),                                            \ | 
 
 
 
 
 | 593 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 594 | __mingw_types_compatible_p (__typeof__ (x), long double),   \ | 
 
 
 
 
 | 595 | __isnanl(x),                                            \ | 
 
 
 
 
 | 596 | __dfp_expansion(__isnan,(__builtin_trap(),x),x)))) | 
 
 
 
 
 | 597 |  | 
 
 
 
 
 | 598 | /* 7.12.3.5 */ | 
 
 
 
 
 | 599 | #define isnormal(x) (fpclassify(x) == FP_NORMAL) | 
 
 
 
 
 | 600 |  | 
 
 
 
 
 | 601 | /* 7.12.3.6 The signbit macro */ | 
 
 
 
 
 | 602 | extern int __cdecl __signbit (double); | 
 
 
 
 
 | 603 | extern int __cdecl __signbitf (float); | 
 
 
 
 
 | 604 | extern int __cdecl __signbitl (long double); | 
 
 
 
 
 | 605 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 606 | __CRT_INLINE int __cdecl __signbit (double x) { | 
 
 
 
 
 | 607 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 608 | __mingw_dbl_type_t hlp; | 
 
 
 
 
 | 609 |  | 
 
 
 
 
 | 610 | hlp.x = x; | 
 
 
 
 
 | 611 | return ((hlp.lh.high & 0x80000000) != 0); | 
 
 
 
 
 | 612 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 613 | unsigned short stw; | 
 
 
 
 
 | 614 | __asm__ __volatile__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x)); | 
 
 
 
 
 | 615 | return stw & 0x0200; | 
 
 
 
 
 | 616 | #endif | 
 
 
 
 
 | 617 | } | 
 
 
 
 
 | 618 |  | 
 
 
 
 
 | 619 | __CRT_INLINE int __cdecl __signbitf (float x) { | 
 
 
 
 
 | 620 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 621 | __mingw_flt_type_t hlp; | 
 
 
 
 
 | 622 | hlp.x = x; | 
 
 
 
 
 | 623 | return ((hlp.val & 0x80000000) != 0); | 
 
 
 
 
 | 624 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 625 | unsigned short stw; | 
 
 
 
 
 | 626 | __asm__ __volatile__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x)); | 
 
 
 
 
 | 627 | return stw & 0x0200; | 
 
 
 
 
 | 628 | #endif | 
 
 
 
 
 | 629 | } | 
 
 
 
 
 | 630 |  | 
 
 
 
 
 | 631 | __CRT_INLINE int __cdecl __signbitl (long double x) { | 
 
 
 
 
 | 632 | #if defined(__x86_64__) || defined(_AMD64_) | 
 
 
 
 
 | 633 | __mingw_ldbl_type_t ld; | 
 
 
 
 
 | 634 | ld.x = x; | 
 
 
 
 
 | 635 | return ((ld.lh.sign_exponent & 0x8000) != 0); | 
 
 
 
 
 | 636 | #elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 637 | return __signbit(x); | 
 
 
 
 
 | 638 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 639 | unsigned short stw; | 
 
 
 
 
 | 640 | __asm__ __volatile__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x)); | 
 
 
 
 
 | 641 | return stw & 0x0200; | 
 
 
 
 
 | 642 | #endif | 
 
 
 
 
 | 643 | } | 
 
 
 
 
 | 644 | #endif | 
 
 
 
 
 | 645 |  | 
 
 
 
 
 | 646 | #define signbit(x) \ | 
 
 
 
 
 | 647 | __mingw_choose_expr (                                         \ | 
 
 
 
 
 | 648 | __mingw_types_compatible_p (__typeof__ (x), double),            \ | 
 
 
 
 
 | 649 | __signbit(x),                                               \ | 
 
 
 
 
 | 650 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 651 | __mingw_types_compatible_p (__typeof__ (x), float),         \ | 
 
 
 
 
 | 652 | __signbitf(x),                                          \ | 
 
 
 
 
 | 653 | __mingw_choose_expr (                                     \ | 
 
 
 
 
 | 654 | __mingw_types_compatible_p (__typeof__ (x), long double),   \ | 
 
 
 
 
 | 655 | __signbitl(x),                                          \ | 
 
 
 
 
 | 656 | __dfp_expansion(__signbit,(__builtin_trap(),x),x)))) | 
 
 
 
 
 | 657 |  | 
 
 
 
 
 | 658 | /* 7.12.4 Trigonometric functions: Double in C89 */ | 
 
 
 
 
 | 659 | extern float __cdecl sinf(float _X); | 
 
 
 
 
 | 660 | extern long double __cdecl sinl(long double); | 
 
 
 
 
 | 661 |  | 
 
 
 
 
 | 662 | extern float __cdecl cosf(float _X); | 
 
 
 
 
 | 663 | extern long double __cdecl cosl(long double); | 
 
 
 
 
 | 664 |  | 
 
 
 
 
 | 665 | extern float __cdecl tanf(float _X); | 
 
 
 
 
 | 666 | extern long double __cdecl tanl(long double); | 
 
 
 
 
 | 667 | extern float __cdecl asinf(float _X); | 
 
 
 
 
 | 668 | extern long double __cdecl asinl(long double); | 
 
 
 
 
 | 669 |  | 
 
 
 
 
 | 670 | extern float __cdecl acosf (float); | 
 
 
 
 
 | 671 | extern long double __cdecl acosl (long double); | 
 
 
 
 
 | 672 |  | 
 
 
 
 
 | 673 | extern float __cdecl atanf (float); | 
 
 
 
 
 | 674 | extern long double __cdecl atanl (long double); | 
 
 
 
 
 | 675 |  | 
 
 
 
 
 | 676 | extern float __cdecl atan2f (float, float); | 
 
 
 
 
 | 677 | extern long double __cdecl atan2l (long double, long double); | 
 
 
 
 
 | 678 |  | 
 
 
 
 
 | 679 | /* 7.12.5 Hyperbolic functions: Double in C89  */ | 
 
 
 
 
 | 680 | extern float __cdecl sinhf(float _X); | 
 
 
 
 
 | 681 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 682 | __CRT_INLINE float sinhf(float _X) { return ((float)sinh((double)_X)); } | 
 
 
 
 
 | 683 | #endif | 
 
 
 
 
 | 684 | extern long double __cdecl sinhl(long double); | 
 
 
 
 
 | 685 |  | 
 
 
 
 
 | 686 | extern float __cdecl coshf(float _X); | 
 
 
 
 
 | 687 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 688 | __CRT_INLINE float coshf(float _X) { return ((float)cosh((double)_X)); } | 
 
 
 
 
 | 689 | #endif | 
 
 
 
 
 | 690 | extern long double __cdecl coshl(long double); | 
 
 
 
 
 | 691 |  | 
 
 
 
 
 | 692 | extern float __cdecl tanhf(float _X); | 
 
 
 
 
 | 693 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 694 | __CRT_INLINE float tanhf(float _X) { return ((float)tanh((double)_X)); } | 
 
 
 
 
 | 695 | #endif | 
 
 
 
 
 | 696 | extern long double __cdecl tanhl(long double); | 
 
 
 
 
 | 697 |  | 
 
 
 
 
 | 698 | /* Inverse hyperbolic trig functions  */ | 
 
 
 
 
 | 699 | /* 7.12.5.1 */ | 
 
 
 
 
 | 700 | extern double __cdecl acosh (double); | 
 
 
 
 
 | 701 | extern float __cdecl acoshf (float); | 
 
 
 
 
 | 702 | extern long double __cdecl acoshl (long double); | 
 
 
 
 
 | 703 |  | 
 
 
 
 
 | 704 | /* 7.12.5.2 */ | 
 
 
 
 
 | 705 | extern double __cdecl asinh (double); | 
 
 
 
 
 | 706 | extern float __cdecl asinhf (float); | 
 
 
 
 
 | 707 | extern long double __cdecl asinhl (long double); | 
 
 
 
 
 | 708 |  | 
 
 
 
 
 | 709 | /* 7.12.5.3 */ | 
 
 
 
 
 | 710 | extern double __cdecl atanh (double); | 
 
 
 
 
 | 711 | extern float __cdecl atanhf  (float); | 
 
 
 
 
 | 712 | extern long double __cdecl atanhl (long double); | 
 
 
 
 
 | 713 |  | 
 
 
 
 
 | 714 | /* Exponentials and logarithms  */ | 
 
 
 
 
 | 715 | /* 7.12.6.1 Double in C89 */ | 
 
 
 
 
 | 716 | extern float __cdecl expf(float _X); | 
 
 
 
 
 | 717 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 718 | __CRT_INLINE float expf(float _X) { return ((float)exp((double)_X)); } | 
 
 
 
 
 | 719 | #endif | 
 
 
 
 
 | 720 | extern long double __cdecl expl(long double); | 
 
 
 
 
 | 721 |  | 
 
 
 
 
 | 722 | /* 7.12.6.2 */ | 
 
 
 
 
 | 723 | extern double __cdecl exp2(double); | 
 
 
 
 
 | 724 | extern float __cdecl exp2f(float); | 
 
 
 
 
 | 725 | extern long double __cdecl exp2l(long double); | 
 
 
 
 
 | 726 |  | 
 
 
 
 
 | 727 | /* 7.12.6.3 The expm1 functions */ | 
 
 
 
 
 | 728 | /* TODO: These could be inlined */ | 
 
 
 
 
 | 729 | extern double __cdecl expm1(double); | 
 
 
 
 
 | 730 | extern float __cdecl expm1f(float); | 
 
 
 
 
 | 731 | extern long double __cdecl expm1l(long double); | 
 
 
 
 
 | 732 |  | 
 
 
 
 
 | 733 | /* 7.12.6.4 Double in C89 */ | 
 
 
 
 
 | 734 | extern float frexpf(float _X,int *_Y); | 
 
 
 
 
 | 735 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 736 | __CRT_INLINE float frexpf(float _X,int *_Y) { return ((float)frexp((double)_X,_Y)); } | 
 
 
 
 
 | 737 | #endif | 
 
 
 
 
 | 738 | extern long double __cdecl frexpl(long double,int *); | 
 
 
 
 
 | 739 |  | 
 
 
 
 
 | 740 | /* 7.12.6.5 */ | 
 
 
 
 
 | 741 | #define FP_ILOGB0 ((int)0x80000000) | 
 
 
 
 
 | 742 | #define FP_ILOGBNAN ((int)0x7fffffff) | 
 
 
 
 
 | 743 | extern int __cdecl ilogb (double); | 
 
 
 
 
 | 744 | extern int __cdecl ilogbf (float); | 
 
 
 
 
 | 745 | extern int __cdecl ilogbl (long double); | 
 
 
 
 
 | 746 |  | 
 
 
 
 
 | 747 | /* 7.12.6.6  Double in C89 */ | 
 
 
 
 
 | 748 | extern float __cdecl ldexpf(float _X,int _Y); | 
 
 
 
 
 | 749 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 750 | __CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp ((double)x, expn); } | 
 
 
 
 
 | 751 | #endif | 
 
 
 
 
 | 752 | extern long double __cdecl ldexpl (long double, int); | 
 
 
 
 
 | 753 |  | 
 
 
 
 
 | 754 | /* 7.12.6.7 Double in C89 */ | 
 
 
 
 
 | 755 | extern float __cdecl logf (float); | 
 
 
 
 
 | 756 | extern long double __cdecl logl(long double); | 
 
 
 
 
 | 757 |  | 
 
 
 
 
 | 758 | /* 7.12.6.8 Double in C89 */ | 
 
 
 
 
 | 759 | extern float __cdecl log10f (float); | 
 
 
 
 
 | 760 | extern long double __cdecl log10l(long double); | 
 
 
 
 
 | 761 |  | 
 
 
 
 
 | 762 | /* 7.12.6.9 */ | 
 
 
 
 
 | 763 | extern double __cdecl log1p(double); | 
 
 
 
 
 | 764 | extern float __cdecl log1pf(float); | 
 
 
 
 
 | 765 | extern long double __cdecl log1pl(long double); | 
 
 
 
 
 | 766 |  | 
 
 
 
 
 | 767 | /* 7.12.6.10 */ | 
 
 
 
 
 | 768 | extern double __cdecl log2 (double); | 
 
 
 
 
 | 769 | extern float __cdecl log2f (float); | 
 
 
 
 
 | 770 | extern long double __cdecl log2l (long double); | 
 
 
 
 
 | 771 |  | 
 
 
 
 
 | 772 | /* 7.12.6.11 */ | 
 
 
 
 
 | 773 | extern double __cdecl logb (double); | 
 
 
 
 
 | 774 | extern float __cdecl logbf (float); | 
 
 
 
 
 | 775 | extern long double __cdecl logbl (long double); | 
 
 
 
 
 | 776 |  | 
 
 
 
 
 | 777 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 778 | /* When compiling with gcc, always use gcc's builtins. | 
 
 
 
 
 | 779 | * The asm inlines below are kept here for future reference: | 
 
 
 
 
 | 780 | * they were written for gcc and do no error handling | 
 
 
 
 
 | 781 | * (exceptions/errno), therefore only valid if __FAST_MATH__ | 
 
 
 
 
 | 782 | * is defined (-ffast-math) .  */ | 
 
 
 
 
 | 783 | #if 0 /*defined(__GNUC__) && defined(__FAST_MATH__)*/ | 
 
 
 
 
 | 784 | __CRT_INLINE double __cdecl logb (double x) | 
 
 
 
 
 | 785 | { | 
 
 
 
 
 | 786 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 787 | __mingw_dbl_type_t hlp; | 
 
 
 
 
 | 788 | int lx, hx; | 
 
 
 
 
 | 789 |  | 
 
 
 
 
 | 790 | hlp.x = x; | 
 
 
 
 
 | 791 | lx = hlp.lh.low; | 
 
 
 
 
 | 792 | hx = hlp.lh.high & 0x7fffffff; /* high |x| */ | 
 
 
 
 
 | 793 | if ((hx | lx) == 0) | 
 
 
 
 
 | 794 | return -1.0 / fabs (x); | 
 
 
 
 
 | 795 | if (hx >= 0x7ff00000) | 
 
 
 
 
 | 796 | return x * x; | 
 
 
 
 
 | 797 | if ((hx >>= 20) == 0) { | 
 
 
 
 
 | 798 | unsigned long long mantissa = hlp.val & 0xfffffffffffffULL; | 
 
 
 
 
 | 799 | return -1023.0 - (__builtin_clzll(mantissa) - 12); | 
 
 
 
 
 | 800 | } | 
 
 
 
 
 | 801 | return (double) (hx - 1023); | 
 
 
 
 
 | 802 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 803 | double res = 0.0; | 
 
 
 
 
 | 804 | __asm__ __volatile__ ("fxtract\n\t" | 
 
 
 
 
 | 805 | "fstp     %%st" : "=t" (res) : "0" (x)); | 
 
 
 
 
 | 806 | return res; | 
 
 
 
 
 | 807 | #endif | 
 
 
 
 
 | 808 | } | 
 
 
 
 
 | 809 |  | 
 
 
 
 
 | 810 | __CRT_INLINE float __cdecl logbf (float x) | 
 
 
 
 
 | 811 | { | 
 
 
 
 
 | 812 | #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 813 | int v; | 
 
 
 
 
 | 814 | __mingw_flt_type_t hlp; | 
 
 
 
 
 | 815 |  | 
 
 
 
 
 | 816 | hlp.x = x; | 
 
 
 
 
 | 817 | v = hlp.val & 0x7fffffff;                     /* high |x| */ | 
 
 
 
 
 | 818 | if (!v) | 
 
 
 
 
 | 819 | return (float)-1.0 / fabsf (x); | 
 
 
 
 
 | 820 | if (v >= 0x7f800000) | 
 
 
 
 
 | 821 | return x * x; | 
 
 
 
 
 | 822 | if ((v >>= 23) == 0) | 
 
 
 
 
 | 823 | return -127.0 - (__builtin_clzl(hlp.val & 0x7fffff) - 9); | 
 
 
 
 
 | 824 | return (float) (v - 127); | 
 
 
 
 
 | 825 | #elif defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 826 | float res = 0.0F; | 
 
 
 
 
 | 827 | __asm__ __volatile__ ("fxtract\n\t" | 
 
 
 
 
 | 828 | "fstp     %%st" : "=t" (res) : "0" (x)); | 
 
 
 
 
 | 829 | return res; | 
 
 
 
 
 | 830 | #endif | 
 
 
 
 
 | 831 | } | 
 
 
 
 
 | 832 |  | 
 
 
 
 
 | 833 | __CRT_INLINE long double __cdecl logbl (long double x) | 
 
 
 
 
 | 834 | { | 
 
 
 
 
 | 835 | #if defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_) | 
 
 
 
 
 | 836 | __mingw_ldbl_type_t hlp; | 
 
 
 
 
 | 837 | int lx, hx; | 
 
 
 
 
 | 838 |  | 
 
 
 
 
 | 839 | hlp.x = x; | 
 
 
 
 
 | 840 | lx = hlp.lh.low; | 
 
 
 
 
 | 841 | hx = hlp.lh.high & 0x7fffffff; /* high |x| */ | 
 
 
 
 
 | 842 | if ((hx | lx) == 0) | 
 
 
 
 
 | 843 | return -1.0 / fabs (x); | 
 
 
 
 
 | 844 | if (hx >= 0x7ff00000) | 
 
 
 
 
 | 845 | return x * x; | 
 
 
 
 
 | 846 | if ((hx >>= 20) == 0) { | 
 
 
 
 
 | 847 | unsigned long long mantissa = hlp.val & 0xfffffffffffffULL; | 
 
 
 
 
 | 848 | return -1023.0 - (__builtin_clzll(mantissa) - 12); | 
 
 
 
 
 | 849 | } | 
 
 
 
 
 | 850 | return (double) (hx - 1023); | 
 
 
 
 
 | 851 | #elif defined(__x86_64__) || defined(_AMD64_) || defined(__i386__) || defined(_X86_) | 
 
 
 
 
 | 852 | long double res = 0.0l; | 
 
 
 
 
 | 853 | __asm__ __volatile__ ("fxtract\n\t" | 
 
 
 
 
 | 854 | "fstp     %%st" : "=t" (res) : "0" (x)); | 
 
 
 
 
 | 855 | return res; | 
 
 
 
 
 | 856 | #endif | 
 
 
 
 
 | 857 | } | 
 
 
 
 
 | 858 | #endif /* defined(__GNUC__) && defined(__FAST_MATH__) */ | 
 
 
 
 
 | 859 | #endif /* __CRT__NO_INLINE */ | 
 
 
 
 
 | 860 |  | 
 
 
 
 
 | 861 | /* 7.12.6.12  Double in C89 */ | 
 
 
 
 
 | 862 | extern float __cdecl modff (float, float*); | 
 
 
 
 
 | 863 | extern long double __cdecl modfl (long double, long double*); | 
 
 
 
 
 | 864 |  | 
 
 
 
 
 | 865 | /* 7.12.6.13 */ | 
 
 
 
 
 | 866 | extern double __cdecl scalbn (double, int); | 
 
 
 
 
 | 867 | extern float __cdecl scalbnf (float, int); | 
 
 
 
 
 | 868 | extern long double __cdecl scalbnl (long double, int); | 
 
 
 
 
 | 869 |  | 
 
 
 
 
 | 870 | extern double __cdecl scalbln (double, long); | 
 
 
 
 
 | 871 | extern float __cdecl scalblnf (float, long); | 
 
 
 
 
 | 872 | extern long double __cdecl scalblnl (long double, long); | 
 
 
 
 
 | 873 |  | 
 
 
 
 
 | 874 | /* 7.12.7.1 */ | 
 
 
 
 
 | 875 | /* Implementations adapted from Cephes versions */ | 
 
 
 
 
 | 876 | extern double __cdecl cbrt (double); | 
 
 
 
 
 | 877 | extern float __cdecl cbrtf (float); | 
 
 
 
 
 | 878 | extern long double __cdecl cbrtl (long double); | 
 
 
 
 
 | 879 |  | 
 
 
 
 
 | 880 | /* 7.12.7.3  */ | 
 
 
 
 
 | 881 | extern double __cdecl hypot (double, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; /* in libmoldname.a */ | 
 
 
 
 
 | 882 | extern float __cdecl hypotf (float x, float y); | 
 
 
 
 
 | 883 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 884 | __CRT_INLINE float __cdecl hypotf (float x, float y) { return (float) hypot ((double)x, (double)y);} | 
 
 
 
 
 | 885 | #endif | 
 
 
 
 
 | 886 | extern long double __cdecl hypotl (long double, long double); | 
 
 
 
 
 | 887 |  | 
 
 
 
 
 | 888 | /* 7.12.7.4 The pow functions. Double in C89 */ | 
 
 
 
 
 | 889 | extern float __cdecl powf(float _X,float _Y); | 
 
 
 
 
 | 890 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 891 | __CRT_INLINE float powf(float _X,float _Y) { return ((float)pow((double)_X,(double)_Y)); } | 
 
 
 
 
 | 892 | #endif | 
 
 
 
 
 | 893 | extern long double __cdecl powl (long double, long double); | 
 
 
 
 
 | 894 |  | 
 
 
 
 
 | 895 | /* 7.12.7.5 The sqrt functions. Double in C89. */ | 
 
 
 
 
 | 896 | extern float __cdecl sqrtf (float); | 
 
 
 
 
 | 897 | extern long double sqrtl(long double); | 
 
 
 
 
 | 898 |  | 
 
 
 
 
 | 899 | /* 7.12.8.1 The erf functions  */ | 
 
 
 
 
 | 900 | extern double __cdecl erf (double); | 
 
 
 
 
 | 901 | extern float __cdecl erff (float); | 
 
 
 
 
 | 902 | extern long double __cdecl erfl (long double); | 
 
 
 
 
 | 903 |  | 
 
 
 
 
 | 904 | /* 7.12.8.2 The erfc functions  */ | 
 
 
 
 
 | 905 | extern double __cdecl erfc (double); | 
 
 
 
 
 | 906 | extern float __cdecl erfcf (float); | 
 
 
 
 
 | 907 | extern long double __cdecl erfcl (long double); | 
 
 
 
 
 | 908 |  | 
 
 
 
 
 | 909 | /* 7.12.8.3 The lgamma functions */ | 
 
 
 
 
 | 910 | extern double __cdecl lgamma (double); | 
 
 
 
 
 | 911 | extern float __cdecl lgammaf (float); | 
 
 
 
 
 | 912 | extern long double __cdecl lgammal (long double); | 
 
 
 
 
 | 913 |  | 
 
 
 
 
 | 914 | extern int signgam; | 
 
 
 
 
 | 915 |  | 
 
 
 
 
 | 916 | /* 7.12.8.4 The tgamma functions */ | 
 
 
 
 
 | 917 | extern double __cdecl tgamma (double); | 
 
 
 
 
 | 918 | extern float __cdecl tgammaf (float); | 
 
 
 
 
 | 919 | extern long double __cdecl tgammal (long double); | 
 
 
 
 
 | 920 |  | 
 
 
 
 
 | 921 | /* 7.12.9.1 Double in C89 */ | 
 
 
 
 
 | 922 | extern float __cdecl ceilf (float); | 
 
 
 
 
 | 923 | extern long double __cdecl ceill (long double); | 
 
 
 
 
 | 924 |  | 
 
 
 
 
 | 925 | /* 7.12.9.2 Double in C89 */ | 
 
 
 
 
 | 926 | extern float __cdecl floorf (float); | 
 
 
 
 
 | 927 | extern long double __cdecl floorl (long double); | 
 
 
 
 
 | 928 |  | 
 
 
 
 
 | 929 | /* 7.12.9.3 */ | 
 
 
 
 
 | 930 | extern double __cdecl nearbyint ( double); | 
 
 
 
 
 | 931 | extern float __cdecl nearbyintf (float); | 
 
 
 
 
 | 932 | extern long double __cdecl nearbyintl (long double); | 
 
 
 
 
 | 933 |  | 
 
 
 
 
 | 934 | /* 7.12.9.4 */ | 
 
 
 
 
 | 935 | /* round, using fpu control word settings */ | 
 
 
 
 
 | 936 | extern double __cdecl rint (double); | 
 
 
 
 
 | 937 | extern float __cdecl rintf (float); | 
 
 
 
 
 | 938 | extern long double __cdecl rintl (long double); | 
 
 
 
 
 | 939 |  | 
 
 
 
 
 | 940 | /* 7.12.9.5 */ | 
 
 
 
 
 | 941 | extern long __cdecl lrint (double); | 
 
 
 
 
 | 942 | extern long __cdecl lrintf (float); | 
 
 
 
 
 | 943 | extern long __cdecl lrintl (long double); | 
 
 
 
 
 | 944 |  | 
 
 
 
 
 | 945 | __MINGW_EXTENSION long long __cdecl llrint (double); | 
 
 
 
 
 | 946 | __MINGW_EXTENSION long long __cdecl llrintf (float); | 
 
 
 
 
 | 947 | __MINGW_EXTENSION long long __cdecl llrintl (long double); | 
 
 
 
 
 | 948 |  | 
 
 
 
 
 | 949 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 950 | /* When compiling with gcc, always use gcc's builtins. | 
 
 
 
 
 | 951 | * The asm inlines below are kept here for future reference: | 
 
 
 
 
 | 952 | * they were written for gcc and do no error handling | 
 
 
 
 
 | 953 | * (exceptions/errno), therefore only valid if __FAST_MATH__ | 
 
 
 
 
 | 954 | * is defined (-ffast-math) .  */ | 
 
 
 
 
 | 955 | #if 0 /*defined(__GNUC__) && defined(__FAST_MATH__)*/ | 
 
 
 
 
 | 956 | __CRT_INLINE double __cdecl rint (double x) | 
 
 
 
 
 | 957 | { | 
 
 
 
 
 | 958 | double retval = 0.0; | 
 
 
 
 
 | 959 | __asm__ __volatile__ ("frndint;": "=t" (retval) : "0" (x)); | 
 
 
 
 
 | 960 | return retval; | 
 
 
 
 
 | 961 | } | 
 
 
 
 
 | 962 |  | 
 
 
 
 
 | 963 | __CRT_INLINE float __cdecl rintf (float x) | 
 
 
 
 
 | 964 | { | 
 
 
 
 
 | 965 | float retval = 0.0; | 
 
 
 
 
 | 966 | __asm__ __volatile__ ("frndint;" : "=t" (retval) : "0" (x) ); | 
 
 
 
 
 | 967 | return retval; | 
 
 
 
 
 | 968 | } | 
 
 
 
 
 | 969 |  | 
 
 
 
 
 | 970 | __CRT_INLINE long double __cdecl rintl (long double x) | 
 
 
 
 
 | 971 | { | 
 
 
 
 
 | 972 | long double retval = 0.0l; | 
 
 
 
 
 | 973 | __asm__ __volatile__ ("frndint;" : "=t" (retval) : "0" (x) ); | 
 
 
 
 
 | 974 | return retval; | 
 
 
 
 
 | 975 | } | 
 
 
 
 
 | 976 |  | 
 
 
 
 
 | 977 | __CRT_INLINE long __cdecl lrint (double x) | 
 
 
 
 
 | 978 | { | 
 
 
 
 
 | 979 | long retval = 0; | 
 
 
 
 
 | 980 | __asm__ __volatile__                                                              \ | 
 
 
 
 
 | 981 | ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");                                \ | 
 
 
 
 
 | 982 | return retval; | 
 
 
 
 
 | 983 | } | 
 
 
 
 
 | 984 |  | 
 
 
 
 
 | 985 | __CRT_INLINE long __cdecl lrintf (float x) | 
 
 
 
 
 | 986 | { | 
 
 
 
 
 | 987 | long retval = 0; | 
 
 
 
 
 | 988 | __asm__ __volatile__                                                              \ | 
 
 
 
 
 | 989 | ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");                                \ | 
 
 
 
 
 | 990 | return retval; | 
 
 
 
 
 | 991 | } | 
 
 
 
 
 | 992 |  | 
 
 
 
 
 | 993 | __CRT_INLINE long __cdecl lrintl (long double x) | 
 
 
 
 
 | 994 | { | 
 
 
 
 
 | 995 | long retval = 0; | 
 
 
 
 
 | 996 | __asm__ __volatile__                                                              \ | 
 
 
 
 
 | 997 | ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");                                \ | 
 
 
 
 
 | 998 | return retval; | 
 
 
 
 
 | 999 | } | 
 
 
 
 
 | 1000 |  | 
 
 
 
 
 | 1001 | __MINGW_EXTENSION __CRT_INLINE long long __cdecl llrint (double x) | 
 
 
 
 
 | 1002 | { | 
 
 
 
 
 | 1003 | __MINGW_EXTENSION long long retval = 0ll; | 
 
 
 
 
 | 1004 | __asm__ __volatile__                                                              \ | 
 
 
 
 
 | 1005 | ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");                               \ | 
 
 
 
 
 | 1006 | return retval; | 
 
 
 
 
 | 1007 | } | 
 
 
 
 
 | 1008 |  | 
 
 
 
 
 | 1009 | __MINGW_EXTENSION __CRT_INLINE long long __cdecl llrintf (float x) | 
 
 
 
 
 | 1010 | { | 
 
 
 
 
 | 1011 | __MINGW_EXTENSION long long retval = 0ll; | 
 
 
 
 
 | 1012 | __asm__ __volatile__                                                              \ | 
 
 
 
 
 | 1013 | ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");                               \ | 
 
 
 
 
 | 1014 | return retval; | 
 
 
 
 
 | 1015 | } | 
 
 
 
 
 | 1016 |  | 
 
 
 
 
 | 1017 | __MINGW_EXTENSION __CRT_INLINE long long __cdecl llrintl (long double x) | 
 
 
 
 
 | 1018 | { | 
 
 
 
 
 | 1019 | __MINGW_EXTENSION long long retval = 0ll; | 
 
 
 
 
 | 1020 | __asm__ __volatile__                                                              \ | 
 
 
 
 
 | 1021 | ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");                               \ | 
 
 
 
 
 | 1022 | return retval; | 
 
 
 
 
 | 1023 | } | 
 
 
 
 
 | 1024 | #endif /* defined(__GNUC__) && defined(__FAST_MATH__) */ | 
 
 
 
 
 | 1025 | #endif /* !__CRT__NO_INLINE */ | 
 
 
 
 
 | 1026 |  | 
 
 
 
 
 | 1027 | /* 7.12.9.6 */ | 
 
 
 
 
 | 1028 | /* round away from zero, regardless of fpu control word settings */ | 
 
 
 
 
 | 1029 | extern double __cdecl round (double); | 
 
 
 
 
 | 1030 | extern float __cdecl roundf (float); | 
 
 
 
 
 | 1031 | extern long double __cdecl roundl (long double); | 
 
 
 
 
 | 1032 |  | 
 
 
 
 
 | 1033 | /* 7.12.9.7  */ | 
 
 
 
 
 | 1034 | extern long __cdecl lround (double); | 
 
 
 
 
 | 1035 | extern long __cdecl lroundf (float); | 
 
 
 
 
 | 1036 | extern long __cdecl lroundl (long double); | 
 
 
 
 
 | 1037 | __MINGW_EXTENSION long long __cdecl llround (double); | 
 
 
 
 
 | 1038 | __MINGW_EXTENSION long long __cdecl llroundf (float); | 
 
 
 
 
 | 1039 | __MINGW_EXTENSION long long __cdecl llroundl (long double); | 
 
 
 
 
 | 1040 |  | 
 
 
 
 
 | 1041 | /* 7.12.9.8 */ | 
 
 
 
 
 | 1042 | /* round towards zero, regardless of fpu control word settings */ | 
 
 
 
 
 | 1043 | extern double __cdecl trunc (double); | 
 
 
 
 
 | 1044 | extern float __cdecl truncf (float); | 
 
 
 
 
 | 1045 | extern long double __cdecl truncl (long double); | 
 
 
 
 
 | 1046 |  | 
 
 
 
 
 | 1047 | /* 7.12.10.1 Double in C89 */ | 
 
 
 
 
 | 1048 | extern float __cdecl fmodf (float, float); | 
 
 
 
 
 | 1049 | extern long double __cdecl fmodl (long double, long double); | 
 
 
 
 
 | 1050 |  | 
 
 
 
 
 | 1051 | /* 7.12.10.2 */ | 
 
 
 
 
 | 1052 | extern double __cdecl remainder (double, double); | 
 
 
 
 
 | 1053 | extern float __cdecl remainderf (float, float); | 
 
 
 
 
 | 1054 | extern long double __cdecl remainderl (long double, long double); | 
 
 
 
 
 | 1055 |  | 
 
 
 
 
 | 1056 | /* 7.12.10.3 */ | 
 
 
 
 
 | 1057 | extern double __cdecl remquo(double, double, int *); | 
 
 
 
 
 | 1058 | extern float __cdecl remquof(float, float, int *); | 
 
 
 
 
 | 1059 | extern long double __cdecl remquol(long double, long double, int *); | 
 
 
 
 
 | 1060 |  | 
 
 
 
 
 | 1061 | /* 7.12.11.1 */ | 
 
 
 
 
 | 1062 | extern double __cdecl copysign (double, double); /* in libmoldname.a */ | 
 
 
 
 
 | 1063 | extern float __cdecl copysignf (float, float); | 
 
 
 
 
 | 1064 | extern long double __cdecl copysignl (long double, long double); | 
 
 
 
 
 | 1065 |  | 
 
 
 
 
 | 1066 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 1067 | #if !defined (__ia64__) | 
 
 
 
 
 | 1068 | __CRT_INLINE double __cdecl copysign (double x, double y) | 
 
 
 
 
 | 1069 | { | 
 
 
 
 
 | 1070 | __mingw_dbl_type_t hx, hy; | 
 
 
 
 
 | 1071 | hx.x = x; hy.x = y; | 
 
 
 
 
 | 1072 | hx.lh.high = (hx.lh.high & 0x7fffffff) | (hy.lh.high & 0x80000000); | 
 
 
 
 
 | 1073 | return hx.x; | 
 
 
 
 
 | 1074 | } | 
 
 
 
 
 | 1075 | __CRT_INLINE float __cdecl copysignf (float x, float y) | 
 
 
 
 
 | 1076 | { | 
 
 
 
 
 | 1077 | __mingw_flt_type_t hx, hy; | 
 
 
 
 
 | 1078 | hx.x = x; hy.x = y; | 
 
 
 
 
 | 1079 | hx.val = (hx.val & 0x7fffffff) | (hy.val & 0x80000000); | 
 
 
 
 
 | 1080 | return hx.x; | 
 
 
 
 
 | 1081 | } | 
 
 
 
 
 | 1082 | #endif | 
 
 
 
 
 | 1083 | #endif | 
 
 
 
 
 | 1084 |  | 
 
 
 
 
 | 1085 | /* 7.12.11.2 Return a NaN */ | 
 
 
 
 
 | 1086 | extern double __cdecl nan(const char *tagp); | 
 
 
 
 
 | 1087 | extern float __cdecl nanf(const char *tagp); | 
 
 
 
 
 | 1088 | extern long double __cdecl nanl(const char *tagp); | 
 
 
 
 
 | 1089 |  | 
 
 
 
 
 | 1090 | #ifndef __STRICT_ANSI__ | 
 
 
 
 
 | 1091 | #define _nan() nan("") | 
 
 
 
 
 | 1092 | #define _nanf() nanf("") | 
 
 
 
 
 | 1093 | #define _nanl() nanl("") | 
 
 
 
 
 | 1094 | #endif | 
 
 
 
 
 | 1095 |  | 
 
 
 
 
 | 1096 | /* 7.12.11.3 */ | 
 
 
 
 
 | 1097 | extern double __cdecl nextafter (double, double); /* in libmoldname.a */ | 
 
 
 
 
 | 1098 | extern float __cdecl nextafterf (float, float); | 
 
 
 
 
 | 1099 | extern long double __cdecl nextafterl (long double, long double); | 
 
 
 
 
 | 1100 |  | 
 
 
 
 
 | 1101 | /* 7.12.11.4 The nexttoward functions */ | 
 
 
 
 
 | 1102 | extern double __cdecl nexttoward (double,  long double); | 
 
 
 
 
 | 1103 | extern float __cdecl nexttowardf (float,  long double); | 
 
 
 
 
 | 1104 | extern long double __cdecl nexttowardl (long double, long double); | 
 
 
 
 
 | 1105 |  | 
 
 
 
 
 | 1106 | /* 7.12.12.1 */ | 
 
 
 
 
 | 1107 | /*  x > y ? (x - y) : 0.0  */ | 
 
 
 
 
 | 1108 | extern double __cdecl fdim (double x, double y); | 
 
 
 
 
 | 1109 | extern float __cdecl fdimf (float x, float y); | 
 
 
 
 
 | 1110 | extern long double __cdecl fdiml (long double x, long double y); | 
 
 
 
 
 | 1111 |  | 
 
 
 
 
 | 1112 | /* fmax and fmin. | 
 
 
 
 
 | 1113 | NaN arguments are treated as missing data: if one argument is a NaN | 
 
 
 
 
 | 1114 | and the other numeric, then these functions choose the numeric | 
 
 
 
 
 | 1115 | value. */ | 
 
 
 
 
 | 1116 |  | 
 
 
 
 
 | 1117 | /* 7.12.12.2 */ | 
 
 
 
 
 | 1118 | extern double __cdecl fmax  (double, double); | 
 
 
 
 
 | 1119 | extern float __cdecl fmaxf (float, float); | 
 
 
 
 
 | 1120 | extern long double __cdecl fmaxl (long double, long double); | 
 
 
 
 
 | 1121 |  | 
 
 
 
 
 | 1122 | /* 7.12.12.3 */ | 
 
 
 
 
 | 1123 | extern double __cdecl fmin (double, double); | 
 
 
 
 
 | 1124 | extern float __cdecl fminf (float, float); | 
 
 
 
 
 | 1125 | extern long double __cdecl fminl (long double, long double); | 
 
 
 
 
 | 1126 |  | 
 
 
 
 
 | 1127 | /* 7.12.13.1 */ | 
 
 
 
 
 | 1128 | /* return x * y + z as a ternary op */ | 
 
 
 
 
 | 1129 | extern double __cdecl fma (double, double, double); | 
 
 
 
 
 | 1130 | extern float __cdecl fmaf (float, float, float); | 
 
 
 
 
 | 1131 | extern long double __cdecl fmal (long double, long double, long double); | 
 
 
 
 
 | 1132 |  | 
 
 
 
 
 | 1133 | /* 7.12.14 */ | 
 
 
 
 
 | 1134 | /* | 
 
 
 
 
 | 1135 | *  With these functions, comparisons involving quiet NaNs set the FP | 
 
 
 
 
 | 1136 | *  condition code to "unordered".  The IEEE floating-point spec | 
 
 
 
 
 | 1137 | *  dictates that the result of floating-point comparisons should be | 
 
 
 
 
 | 1138 | *  false whenever a NaN is involved, with the exception of the != op, | 
 
 
 
 
 | 1139 | *  which always returns true: yes, (NaN != NaN) is true). | 
 
 
 
 
 | 1140 | */ | 
 
 
 
 
 | 1141 |  | 
 
 
 
 
 | 1142 | #ifdef __GNUC__ | 
 
 
 
 
 | 1143 |  | 
 
 
 
 
 | 1144 | #define isgreater(x, y) __builtin_isgreater(x, y) | 
 
 
 
 
 | 1145 | #define isgreaterequal(x, y) __builtin_isgreaterequal(x, y) | 
 
 
 
 
 | 1146 | #define isless(x, y) __builtin_isless(x, y) | 
 
 
 
 
 | 1147 | #define islessequal(x, y) __builtin_islessequal(x, y) | 
 
 
 
 
 | 1148 | #define islessgreater(x, y) __builtin_islessgreater(x, y) | 
 
 
 
 
 | 1149 | #define isunordered(x, y) __builtin_isunordered(x, y) | 
 
 
 
 
 | 1150 |  | 
 
 
 
 
 | 1151 | #else | 
 
 
 
 
 | 1152 | /*  helper  */ | 
 
 
 
 
 | 1153 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 1154 | __CRT_INLINE int  __cdecl | 
 
 
 
 
 | 1155 | __fp_unordered_compare (long double x, long double y){ | 
 
 
 
 
 | 1156 | unsigned short retval; | 
 
 
 
 
 | 1157 | __asm__ __volatile__ ("fucom %%st(1);" | 
 
 
 
 
 | 1158 | "fnstsw;": "=a" (retval) : "t" (x), "u" (y)); | 
 
 
 
 
 | 1159 | return retval; | 
 
 
 
 
 | 1160 | } | 
 
 
 
 
 | 1161 | #endif /* __GNUC__ */ | 
 
 
 
 
 | 1162 |  | 
 
 
 
 
 | 1163 | #define isgreater(x, y) ((__fp_unordered_compare(x, y)  & 0x4500) == 0) | 
 
 
 
 
 | 1164 | #define isless(x, y) ((__fp_unordered_compare (y, x)  & 0x4500) == 0) | 
 
 
 
 
 | 1165 | #define isgreaterequal(x, y) ((__fp_unordered_compare (x, y)  & FP_INFINITE) == 0) | 
 
 
 
 
 | 1166 | #define islessequal(x, y) ((__fp_unordered_compare(y, x)  & FP_INFINITE) == 0) | 
 
 
 
 
 | 1167 | #define islessgreater(x, y) ((__fp_unordered_compare(x, y)  & FP_SUBNORMAL) == 0) | 
 
 
 
 
 | 1168 | #define isunordered(x, y) ((__fp_unordered_compare(x, y)  & 0x4500) == 0x4500) | 
 
 
 
 
 | 1169 |  | 
 
 
 
 
 | 1170 | #endif | 
 
 
 
 
 | 1171 |  | 
 
 
 
 
 | 1172 | #endif /* __STDC_VERSION__ >= 199901L */ | 
 
 
 
 
 | 1173 | #endif /* __NO_ISOCEXT */ | 
 
 
 
 
 | 1174 |  | 
 
 
 
 
 | 1175 | #if defined(_X86_) && !defined(__x86_64) | 
 
 
 
 
 | 1176 | _CRTIMP float __cdecl _hypotf(float _X,float _Y); | 
 
 
 
 
 | 1177 | #endif | 
 
 
 
 
 | 1178 |  | 
 
 
 
 
 | 1179 | #if !defined(__ia64__) | 
 
 
 
 
 | 1180 | _CRTIMP float __cdecl _copysignf (float _Number,float _Sign); | 
 
 
 
 
 | 1181 | _CRTIMP float __cdecl _chgsignf (float _X); | 
 
 
 
 
 | 1182 | _CRTIMP float __cdecl _logbf(float _X); | 
 
 
 
 
 | 1183 | _CRTIMP float __cdecl _nextafterf(float _X,float _Y); | 
 
 
 
 
 | 1184 | _CRTIMP int __cdecl _finitef(float _X); | 
 
 
 
 
 | 1185 | _CRTIMP int __cdecl _isnanf(float _X); | 
 
 
 
 
 | 1186 | _CRTIMP int __cdecl _fpclassf(float _X); | 
 
 
 
 
 | 1187 | #endif | 
 
 
 
 
 | 1188 |  | 
 
 
 
 
 | 1189 | #ifdef _SIGN_DEFINED | 
 
 
 
 
 | 1190 | extern long double __cdecl _chgsignl (long double); | 
 
 
 
 
 | 1191 | #define _copysignl copysignl | 
 
 
 
 
 | 1192 | #endif /* _SIGN_DEFINED */ | 
 
 
 
 
 | 1193 |  | 
 
 
 
 
 | 1194 | #define _hypotl hypotl | 
 
 
 
 
 | 1195 |  | 
 
 
 
 
 | 1196 | #ifndef NO_OLDNAMES | 
 
 
 
 
 | 1197 | #define matherr _matherr | 
 
 
 
 
 | 1198 | #define HUGE    _HUGE | 
 
 
 
 
 | 1199 | #endif | 
 
 
 
 
 | 1200 |  | 
 
 
 
 
 | 1201 | /* Documentation on decimal float math | 
 
 
 
 
 | 1202 | http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=8cf166fedd1aa110VgnVCM100000a360ea10RCRD | 
 
 
 
 
 | 1203 | */ | 
 
 
 
 
 | 1204 | #ifdef __STDC_WANT_DEC_FP__ | 
 
 
 
 
 | 1205 |  | 
 
 
 
 
 | 1206 | #define DEC_INFINITY __builtin_infd32() | 
 
 
 
 
 | 1207 | #define DEC_NAN __builtin_nand32("") | 
 
 
 
 
 | 1208 |  | 
 
 
 
 
 | 1209 | extern int __cdecl __isnand32(_Decimal32 x); | 
 
 
 
 
 | 1210 | extern int __cdecl __isnand64(_Decimal64 x); | 
 
 
 
 
 | 1211 | extern int __cdecl __isnand128(_Decimal128 x); | 
 
 
 
 
 | 1212 | extern int __cdecl __fpclassifyd32 (_Decimal32); | 
 
 
 
 
 | 1213 | extern int __cdecl __fpclassifyd64 (_Decimal64); | 
 
 
 
 
 | 1214 | extern int __cdecl __fpclassifyd128 (_Decimal128); | 
 
 
 
 
 | 1215 | extern int __cdecl __signbitd32 (_Decimal32); | 
 
 
 
 
 | 1216 | extern int __cdecl __signbitd64 (_Decimal64); | 
 
 
 
 
 | 1217 | extern int __cdecl __signbitd128 (_Decimal128); | 
 
 
 
 
 | 1218 |  | 
 
 
 
 
 | 1219 | #ifndef __CRT__NO_INLINE | 
 
 
 
 
 | 1220 | __CRT_INLINE __cdecl __isnand32(_Decimal32 x){ | 
 
 
 
 
 | 1221 | return __builtin_isnand32(x); | 
 
 
 
 
 | 1222 | } | 
 
 
 
 
 | 1223 |  | 
 
 
 
 
 | 1224 | __CRT_INLINE __cdecl __isnand64(_Decimal64 x){ | 
 
 
 
 
 | 1225 | return __builtin_isnand64(x); | 
 
 
 
 
 | 1226 | } | 
 
 
 
 
 | 1227 |  | 
 
 
 
 
 | 1228 | __CRT_INLINE __cdecl __isnand128(_Decimal128 x){ | 
 
 
 
 
 | 1229 | return __builtin_isnand128(x); | 
 
 
 
 
 | 1230 | } | 
 
 
 
 
 | 1231 |  | 
 
 
 
 
 | 1232 | __CRT_INLINE int __cdecl __signbitd32 (_Decimal32 x){ | 
 
 
 
 
 | 1233 | return __buintin_signbitd32(x); | 
 
 
 
 
 | 1234 | } | 
 
 
 
 
 | 1235 |  | 
 
 
 
 
 | 1236 | __CRT_INLINE int __cdecl __signbitd64 (_Decimal64 x){ | 
 
 
 
 
 | 1237 | return __buintin_signbitd64(x); | 
 
 
 
 
 | 1238 | } | 
 
 
 
 
 | 1239 |  | 
 
 
 
 
 | 1240 | __CRT_INLINE int __cdecl __signbitd128 (_Decimal128 x){ | 
 
 
 
 
 | 1241 | return __buintin_signbitd128(x); | 
 
 
 
 
 | 1242 | } | 
 
 
 
 
 | 1243 |  | 
 
 
 
 
 | 1244 | #endif | 
 
 
 
 
 | 1245 |  | 
 
 
 
 
 | 1246 | /* Still missing | 
 
 
 
 
 | 1247 | #define HUGE_VAL_D32 | 
 
 
 
 
 | 1248 | #define HUGE_VAL_D64 | 
 
 
 
 
 | 1249 | #define HUGE_VAL_D128 | 
 
 
 
 
 | 1250 | */ | 
 
 
 
 
 | 1251 |  | 
 
 
 
 
 | 1252 | /*** exponentials ***/ | 
 
 
 
 
 | 1253 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/expd64.3m.htm */ | 
 
 
 
 
 | 1254 | _Decimal64 __cdecl expd64(_Decimal64 _X); | 
 
 
 
 
 | 1255 | _Decimal128 __cdecl expd128(_Decimal128 _X); | 
 
 
 
 
 | 1256 | _Decimal32 __cdecl expd32(_Decimal32 _X); | 
 
 
 
 
 | 1257 |  | 
 
 
 
 
 | 1258 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/exp2d64.3m.htm */ | 
 
 
 
 
 | 1259 | _Decimal64 __cdecl exp2d64(_Decimal64 _X); | 
 
 
 
 
 | 1260 | _Decimal128 __cdecl exp2d128(_Decimal128 _X); | 
 
 
 
 
 | 1261 | _Decimal32 __cdecl exp2d32(_Decimal32 _X); | 
 
 
 
 
 | 1262 |  | 
 
 
 
 
 | 1263 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/exp10d64.3m.htm */ | 
 
 
 
 
 | 1264 | _Decimal64 __cdecl exp10d64(_Decimal64 _X); | 
 
 
 
 
 | 1265 | _Decimal128 __cdecl exp10d128(_Decimal128 _X); | 
 
 
 
 
 | 1266 | _Decimal32 __cdecl exp10d32(_Decimal32 _X); | 
 
 
 
 
 | 1267 |  | 
 
 
 
 
 | 1268 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/expm1d64.3m.htm */ | 
 
 
 
 
 | 1269 | _Decimal64 __cdecl expm1d64(_Decimal64 _X); | 
 
 
 
 
 | 1270 | _Decimal128 __cdecl expm1d128(_Decimal128 _X); | 
 
 
 
 
 | 1271 | _Decimal32 __cdecl expm1d32(_Decimal32 _X); | 
 
 
 
 
 | 1272 |  | 
 
 
 
 
 | 1273 | /*** logarithms ***/ | 
 
 
 
 
 | 1274 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/logd64.3m.htm */ | 
 
 
 
 
 | 1275 | _Decimal64 __cdecl logd64(_Decimal64 _X); | 
 
 
 
 
 | 1276 | _Decimal128 __cdecl logd128(_Decimal128 _X); | 
 
 
 
 
 | 1277 | _Decimal32 __cdecl logd32(_Decimal32 _X); | 
 
 
 
 
 | 1278 |  | 
 
 
 
 
 | 1279 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/log2d64.3m.htm */ | 
 
 
 
 
 | 1280 | _Decimal64 __cdecl log2d64(_Decimal64 _X); | 
 
 
 
 
 | 1281 | _Decimal128 __cdecl log2d128(_Decimal128 _X); | 
 
 
 
 
 | 1282 | _Decimal32 __cdecl log2d32(_Decimal32 _X); | 
 
 
 
 
 | 1283 |  | 
 
 
 
 
 | 1284 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/log10d64.3m.htm */ | 
 
 
 
 
 | 1285 | _Decimal64 __cdecl log10d64(_Decimal64 _X); | 
 
 
 
 
 | 1286 | _Decimal128 __cdecl log10d128(_Decimal128 _X); | 
 
 
 
 
 | 1287 | _Decimal32 __cdecl log10d32(_Decimal32 _X); | 
 
 
 
 
 | 1288 |  | 
 
 
 
 
 | 1289 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/log1pd64.3m.htm */ | 
 
 
 
 
 | 1290 | _Decimal64 __cdecl log1pd64(_Decimal64 _X); | 
 
 
 
 
 | 1291 | _Decimal128 __cdecl log1pd128(_Decimal128 _X); | 
 
 
 
 
 | 1292 | _Decimal32 __cdecl log1pd32(_Decimal32 _X); | 
 
 
 
 
 | 1293 |  | 
 
 
 
 
 | 1294 | /*** trigonometrics ***/ | 
 
 
 
 
 | 1295 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/cosd64.3m.htm */ | 
 
 
 
 
 | 1296 | _Decimal64 __cdecl cosd64(_Decimal64 _X); | 
 
 
 
 
 | 1297 | _Decimal128 __cdecl cosd128(_Decimal128 _X); | 
 
 
 
 
 | 1298 | _Decimal32 __cdecl cosd32(_Decimal32 _X); | 
 
 
 
 
 | 1299 |  | 
 
 
 
 
 | 1300 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/sind64.3m.htm */ | 
 
 
 
 
 | 1301 | _Decimal64 __cdecl sind64(_Decimal64 _X); | 
 
 
 
 
 | 1302 | _Decimal128 __cdecl sind128(_Decimal128 _X); | 
 
 
 
 
 | 1303 | _Decimal32 __cdecl sind32(_Decimal32 _X); | 
 
 
 
 
 | 1304 |  | 
 
 
 
 
 | 1305 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/tand64.3m.htm */ | 
 
 
 
 
 | 1306 | _Decimal64 __cdecl tand64(_Decimal64 _X); | 
 
 
 
 
 | 1307 | _Decimal128 __cdecl tand128(_Decimal128 _X); | 
 
 
 
 
 | 1308 | _Decimal32 __cdecl tand32(_Decimal32 _X); | 
 
 
 
 
 | 1309 |  | 
 
 
 
 
 | 1310 | /*** inverse trigonometrics ***/ | 
 
 
 
 
 | 1311 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/acosd64.3m.htm */ | 
 
 
 
 
 | 1312 | _Decimal64 __cdecl acosd64(_Decimal64 _X); | 
 
 
 
 
 | 1313 | _Decimal128 __cdecl acosd128(_Decimal128 _X); | 
 
 
 
 
 | 1314 | _Decimal32 __cdecl acosd32(_Decimal32 _X); | 
 
 
 
 
 | 1315 |  | 
 
 
 
 
 | 1316 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/asind64.3m.htm */ | 
 
 
 
 
 | 1317 | _Decimal64 __cdecl asind64(_Decimal64 _X); | 
 
 
 
 
 | 1318 | _Decimal128 __cdecl asind128(_Decimal128 _X); | 
 
 
 
 
 | 1319 | _Decimal32 __cdecl asind32(_Decimal32 _X); | 
 
 
 
 
 | 1320 |  | 
 
 
 
 
 | 1321 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/atand64.3m.htm */ | 
 
 
 
 
 | 1322 | _Decimal64 __cdecl atand64(_Decimal64 _X); | 
 
 
 
 
 | 1323 | _Decimal128 __cdecl atand128(_Decimal128 _X); | 
 
 
 
 
 | 1324 | _Decimal32 __cdecl atand32(_Decimal32 _X); | 
 
 
 
 
 | 1325 |  | 
 
 
 
 
 | 1326 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/atan2d64.3m.htm */ | 
 
 
 
 
 | 1327 | _Decimal64 __cdecl atan2d64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1328 | _Decimal128 __cdecl atan2d128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1329 | _Decimal32 __cdecl atan2d32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1330 |  | 
 
 
 
 
 | 1331 | /*** hyperbolics ***/ | 
 
 
 
 
 | 1332 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/coshd64.3m.htm */ | 
 
 
 
 
 | 1333 | _Decimal64 __cdecl coshd64(_Decimal64 _X); | 
 
 
 
 
 | 1334 | _Decimal128 __cdecl coshd128(_Decimal128 _X); | 
 
 
 
 
 | 1335 | _Decimal32 __cdecl coshd32(_Decimal32 _X); | 
 
 
 
 
 | 1336 |  | 
 
 
 
 
 | 1337 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/sinhd64.3m.htm */ | 
 
 
 
 
 | 1338 | _Decimal64 __cdecl sinhd64(_Decimal64 _X); | 
 
 
 
 
 | 1339 | _Decimal128 __cdecl sinhd128(_Decimal128 _X); | 
 
 
 
 
 | 1340 | _Decimal32 __cdecl sinhd32(_Decimal32 _X); | 
 
 
 
 
 | 1341 |  | 
 
 
 
 
 | 1342 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/tanhd64.3m.htm */ | 
 
 
 
 
 | 1343 | _Decimal64 __cdecl tanhd64(_Decimal64 _X); | 
 
 
 
 
 | 1344 | _Decimal128 __cdecl tanhd128(_Decimal128 _X); | 
 
 
 
 
 | 1345 | _Decimal32 __cdecl tanhd32(_Decimal32 _X); | 
 
 
 
 
 | 1346 |  | 
 
 
 
 
 | 1347 | /*** inverse hyperbolics ***/ | 
 
 
 
 
 | 1348 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/acoshd64.3m.htm */ | 
 
 
 
 
 | 1349 | _Decimal64 __cdecl acoshd64(_Decimal64 _X); | 
 
 
 
 
 | 1350 | _Decimal128 __cdecl acoshd128(_Decimal128 _X); | 
 
 
 
 
 | 1351 | _Decimal32 __cdecl acoshd32(_Decimal32 _X); | 
 
 
 
 
 | 1352 |  | 
 
 
 
 
 | 1353 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/asinhd64.3m.htm */ | 
 
 
 
 
 | 1354 | _Decimal64 __cdecl asinhd64(_Decimal64 _X); | 
 
 
 
 
 | 1355 | _Decimal128 __cdecl asinhd128(_Decimal128 _X); | 
 
 
 
 
 | 1356 | _Decimal32 __cdecl asinhd32(_Decimal32 _X); | 
 
 
 
 
 | 1357 |  | 
 
 
 
 
 | 1358 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/atanhd64.3m.htm */ | 
 
 
 
 
 | 1359 | _Decimal64 __cdecl atanhd64(_Decimal64 _X); | 
 
 
 
 
 | 1360 | _Decimal128 __cdecl atanhd128(_Decimal128 _X); | 
 
 
 
 
 | 1361 | _Decimal32 __cdecl atanhd32(_Decimal32 _X); | 
 
 
 
 
 | 1362 |  | 
 
 
 
 
 | 1363 | /*** square & cube roots, hypotenuse ***/ | 
 
 
 
 
 | 1364 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/sqrtd64.3m.htm */ | 
 
 
 
 
 | 1365 | _Decimal64 __cdecl sqrtd64(_Decimal64 _X); | 
 
 
 
 
 | 1366 | _Decimal128 __cdecl sqrtd128(_Decimal128 _X); | 
 
 
 
 
 | 1367 | _Decimal32 __cdecl sqrtd32(_Decimal32 _X); | 
 
 
 
 
 | 1368 |  | 
 
 
 
 
 | 1369 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/cbrtd64.3m.htm */ | 
 
 
 
 
 | 1370 | _Decimal64 __cdecl cbrtd64(_Decimal64 _X); | 
 
 
 
 
 | 1371 | _Decimal128 __cdecl cbrtd128(_Decimal128 _X); | 
 
 
 
 
 | 1372 | _Decimal32 __cdecl cbrtd32(_Decimal32 _X); | 
 
 
 
 
 | 1373 |  | 
 
 
 
 
 | 1374 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/hypotd64.3m.htm */ | 
 
 
 
 
 | 1375 | _Decimal64 __cdecl hypotd64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1376 | _Decimal128 __cdecl hypotd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1377 | _Decimal32 __cdecl hypotd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1378 |  | 
 
 
 
 
 | 1379 | /*** floating multiply-add ***/ | 
 
 
 
 
 | 1380 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/fmad64.3m.htm */ | 
 
 
 
 
 | 1381 | _Decimal64 __cdecl fmad64(_Decimal64 _X, _Decimal64 y, _Decimal64 _Z); | 
 
 
 
 
 | 1382 | _Decimal128 __cdecl fmad128(_Decimal128 _X, _Decimal128 y, _Decimal128 _Z); | 
 
 
 
 
 | 1383 | _Decimal32 __cdecl fmad32(_Decimal32 _X, _Decimal32 y, _Decimal32 _Z); | 
 
 
 
 
 | 1384 |  | 
 
 
 
 
 | 1385 | /*** exponent/significand ***/ | 
 
 
 
 
 | 1386 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/logbd64.3m.htm */ | 
 
 
 
 
 | 1387 | _Decimal64 __cdecl logbd64(_Decimal64 _X); | 
 
 
 
 
 | 1388 | _Decimal128 __cdecl logbd128(_Decimal128 _X); | 
 
 
 
 
 | 1389 | _Decimal32 __cdecl logbd32(_Decimal32 _X); | 
 
 
 
 
 | 1390 |  | 
 
 
 
 
 | 1391 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/ilogbd64.3m.htm */ | 
 
 
 
 
 | 1392 | int __cdecl ilogbd64(_Decimal64 _X); | 
 
 
 
 
 | 1393 | int __cdecl ilogbd128(_Decimal128 _X); | 
 
 
 
 
 | 1394 | int __cdecl ilogbd32(_Decimal32 _X); | 
 
 
 
 
 | 1395 |  | 
 
 
 
 
 | 1396 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/frexpd64.3m.htm */ | 
 
 
 
 
 | 1397 | _Decimal64 __cdecl frexpd64(_Decimal64 _X, int *_Y); | 
 
 
 
 
 | 1398 | _Decimal128 __cdecl frexpd128(_Decimal128 _X, int *_Y); | 
 
 
 
 
 | 1399 | _Decimal32 __cdecl frexpd32(_Decimal32 _X, int *_Y); | 
 
 
 
 
 | 1400 |  | 
 
 
 
 
 | 1401 | /*** quantum ***/ | 
 
 
 
 
 | 1402 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/quantized64.3m.htm */ | 
 
 
 
 
 | 1403 | _Decimal64 __cdecl quantized64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1404 | _Decimal128 __cdecl quantized128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1405 | _Decimal32 __cdecl quantized32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1406 |  | 
 
 
 
 
 | 1407 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/samequantumd64.3m.htm */ | 
 
 
 
 
 | 1408 | _Bool __cdecl samequantumd64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1409 | _Bool __cdecl samequantumd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1410 | _Bool __cdecl samequantumd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1411 |  | 
 
 
 
 
 | 1412 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/quantexpd64.3m.htm */ | 
 
 
 
 
 | 1413 | int __cdecl quantexpd64(_Decimal64 _X); | 
 
 
 
 
 | 1414 | int __cdecl quantexpd128(_Decimal128 _X); | 
 
 
 
 
 | 1415 | int __cdecl quantexpd32(_Decimal32 _X); | 
 
 
 
 
 | 1416 |  | 
 
 
 
 
 | 1417 | /*** scaling ***/ | 
 
 
 
 
 | 1418 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/scalbnd64.3m.htm */ | 
 
 
 
 
 | 1419 | _Decimal64 __cdecl scalbnd64(_Decimal64 _X, int _Y); | 
 
 
 
 
 | 1420 | _Decimal128 __cdecl scalbnd128(_Decimal128 _X, int _Y); | 
 
 
 
 
 | 1421 | _Decimal32 __cdecl scalbnd32(_Decimal32 _X, int _Y); | 
 
 
 
 
 | 1422 |  | 
 
 
 
 
 | 1423 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/scalblnd64.3m.htm */ | 
 
 
 
 
 | 1424 | _Decimal64 __cdecl scalblnd64(_Decimal64 _X, long int _Y); | 
 
 
 
 
 | 1425 | _Decimal128 __cdecl scalblnd128(_Decimal128 _X, long int _Y); | 
 
 
 
 
 | 1426 | _Decimal32 __cdecl scalblnd32(_Decimal32 _X, long int _Y); | 
 
 
 
 
 | 1427 |  | 
 
 
 
 
 | 1428 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/ldexpd64.3m.htm */ | 
 
 
 
 
 | 1429 | _Decimal64 __cdecl ldexpd64(_Decimal64 _X, int _Y); | 
 
 
 
 
 | 1430 | _Decimal128 __cdecl ldexpd128(_Decimal128 _X, int _Y); | 
 
 
 
 
 | 1431 | _Decimal32 __cdecl ldexpd32(_Decimal32 _X, int _Y); | 
 
 
 
 
 | 1432 |  | 
 
 
 
 
 | 1433 | /*** rounding to integral floating ***/ | 
 
 
 
 
 | 1434 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/ceild64.3m.htm */ | 
 
 
 
 
 | 1435 | _Decimal64 __cdecl ceild64(_Decimal64 _X); | 
 
 
 
 
 | 1436 | _Decimal128 __cdecl ceild128(_Decimal128 _X); | 
 
 
 
 
 | 1437 | _Decimal32 __cdecl ceild32(_Decimal32 _X); | 
 
 
 
 
 | 1438 |  | 
 
 
 
 
 | 1439 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/floord64.3m.htm */ | 
 
 
 
 
 | 1440 | _Decimal64 __cdecl floord64(_Decimal64 _X); | 
 
 
 
 
 | 1441 | _Decimal128 __cdecl floord128(_Decimal128 _X); | 
 
 
 
 
 | 1442 | _Decimal32 __cdecl floord32(_Decimal32 _X); | 
 
 
 
 
 | 1443 |  | 
 
 
 
 
 | 1444 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/truncd64.3m.htm */ | 
 
 
 
 
 | 1445 | _Decimal64 __cdecl truncd64(_Decimal64 _X); | 
 
 
 
 
 | 1446 | _Decimal128 __cdecl truncd128(_Decimal128 _X); | 
 
 
 
 
 | 1447 | _Decimal32 __cdecl truncd32(_Decimal32 _X); | 
 
 
 
 
 | 1448 |  | 
 
 
 
 
 | 1449 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/roundd64.3m.htm */ | 
 
 
 
 
 | 1450 | _Decimal64 __cdecl roundd64(_Decimal64 _X); | 
 
 
 
 
 | 1451 | _Decimal128 __cdecl roundd128(_Decimal128 _X); | 
 
 
 
 
 | 1452 | _Decimal32 __cdecl roundd32(_Decimal32 _X); | 
 
 
 
 
 | 1453 |  | 
 
 
 
 
 | 1454 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/rintd64.3m.htm */ | 
 
 
 
 
 | 1455 | _Decimal64 __cdecl rintd64(_Decimal64 _X); | 
 
 
 
 
 | 1456 | _Decimal128 __cdecl rintd128(_Decimal128 _X); | 
 
 
 
 
 | 1457 | _Decimal32 __cdecl rintd32(_Decimal32 _X); | 
 
 
 
 
 | 1458 |  | 
 
 
 
 
 | 1459 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/nearbyintd64.3m.htm */ | 
 
 
 
 
 | 1460 | _Decimal64 __cdecl nearbyintd64(_Decimal64 _X); | 
 
 
 
 
 | 1461 | _Decimal128 __cdecl nearbyintd128(_Decimal128 _X); | 
 
 
 
 
 | 1462 | _Decimal32 __cdecl nearbyintd32(_Decimal32 _X); | 
 
 
 
 
 | 1463 |  | 
 
 
 
 
 | 1464 | /*** rounding to integer ***/ | 
 
 
 
 
 | 1465 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/lroundd64.3m.htm */ | 
 
 
 
 
 | 1466 | long int __cdecl lroundd64(_Decimal64 _X); | 
 
 
 
 
 | 1467 | long int __cdecl lroundd128(_Decimal128 _X); | 
 
 
 
 
 | 1468 | long int __cdecl lroundd32(_Decimal32 _X); | 
 
 
 
 
 | 1469 |  | 
 
 
 
 
 | 1470 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/llroundd64.3m.htm */ | 
 
 
 
 
 | 1471 | long long int __cdecl llroundd64(_Decimal64 _X); | 
 
 
 
 
 | 1472 | long long int __cdecl llroundd128(_Decimal128 _X); | 
 
 
 
 
 | 1473 | long long int __cdecl llroundd32(_Decimal32 _X); | 
 
 
 
 
 | 1474 |  | 
 
 
 
 
 | 1475 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/lrintd64.3m.htm */ | 
 
 
 
 
 | 1476 | long int __cdecl lrintd64(_Decimal64 _X); | 
 
 
 
 
 | 1477 | long int __cdecl lrintd128(_Decimal128 _X); | 
 
 
 
 
 | 1478 | long int __cdecl lrintd32(_Decimal32 _X); | 
 
 
 
 
 | 1479 |  | 
 
 
 
 
 | 1480 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/llrintd64.3m.htm */ | 
 
 
 
 
 | 1481 | long long int __cdecl llrintd64(_Decimal64 _X); | 
 
 
 
 
 | 1482 | long long int __cdecl llrintd128(_Decimal128 _X); | 
 
 
 
 
 | 1483 | long long int __cdecl llrintd32(_Decimal32 _X); | 
 
 
 
 
 | 1484 |  | 
 
 
 
 
 | 1485 | /*** integral and fractional parts ***/ | 
 
 
 
 
 | 1486 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/modfd64.3m.htm */ | 
 
 
 
 
 | 1487 | _Decimal64 __cdecl modfd64(_Decimal64 _X, _Decimal64 *_Y); | 
 
 
 
 
 | 1488 | _Decimal128 __cdecl modfd128(_Decimal128 _X, _Decimal128 *_Y); | 
 
 
 
 
 | 1489 | _Decimal32 __cdecl modfd32(_Decimal32 _X, _Decimal32 *_Y); | 
 
 
 
 
 | 1490 |  | 
 
 
 
 
 | 1491 | /** remainder/mod ***/ | 
 
 
 
 
 | 1492 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/remainderd64.3m.htm */ | 
 
 
 
 
 | 1493 | _Decimal64 __cdecl remainderd64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1494 | _Decimal128 __cdecl remainderd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1495 | _Decimal32 __cdecl remainderd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1496 |  | 
 
 
 
 
 | 1497 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/fmodd64.3m.htm */ | 
 
 
 
 
 | 1498 | _Decimal64 __cdecl fmodd64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1499 | _Decimal128 __cdecl fmodd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1500 | _Decimal32 __cdecl fmodd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1501 |  | 
 
 
 
 
 | 1502 | /*** error functions ***/ | 
 
 
 
 
 | 1503 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/erfd64.3m.htm */ | 
 
 
 
 
 | 1504 | _Decimal64 __cdecl erfd64(_Decimal64 _X); | 
 
 
 
 
 | 1505 | _Decimal128 __cdecl erfd128(_Decimal128 _X); | 
 
 
 
 
 | 1506 | _Decimal32 __cdecl erfd32(_Decimal32 _X); | 
 
 
 
 
 | 1507 | _Decimal64 __cdecl erfcd64(_Decimal64 _X); | 
 
 
 
 
 | 1508 | _Decimal128 __cdecl erfcd128(_Decimal128 _X); | 
 
 
 
 
 | 1509 | _Decimal32 __cdecl erfcd32(_Decimal32 _X); | 
 
 
 
 
 | 1510 |  | 
 
 
 
 
 | 1511 | /*** gamma functions ***/ | 
 
 
 
 
 | 1512 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/lgammad64.3m.htm */ | 
 
 
 
 
 | 1513 | _Decimal64 __cdecl lgammad64(_Decimal64 _X); | 
 
 
 
 
 | 1514 | _Decimal128 __cdecl lgammad128(_Decimal128 _X); | 
 
 
 
 
 | 1515 | _Decimal32 __cdecl lgammad32(_Decimal32 _X); | 
 
 
 
 
 | 1516 |  | 
 
 
 
 
 | 1517 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/tgammad64.3m.htm */ | 
 
 
 
 
 | 1518 | _Decimal64 __cdecl tgammad64(_Decimal64 _X); | 
 
 
 
 
 | 1519 | _Decimal128 __cdecl tgammad128(_Decimal128 _X); | 
 
 
 
 
 | 1520 | _Decimal32 __cdecl tgammad32(_Decimal32 _X); | 
 
 
 
 
 | 1521 |  | 
 
 
 
 
 | 1522 | /*** next value ***/ | 
 
 
 
 
 | 1523 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/nextafterd64.3m.htm */ | 
 
 
 
 
 | 1524 | _Decimal64 __cdecl nextafterd64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1525 | _Decimal128 __cdecl nextafterd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1526 | _Decimal32 __cdecl nextafterd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1527 | _Decimal64 __cdecl nexttowardd64(_Decimal64 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1528 | _Decimal128 __cdecl nexttowardd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1529 | _Decimal32 __cdecl nexttowardd32(_Decimal32 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1530 |  | 
 
 
 
 
 | 1531 | /*** absolute value, copy sign ***/ | 
 
 
 
 
 | 1532 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/fabsd64.3m.htm */ | 
 
 
 
 
 | 1533 | _Decimal64 __cdecl fabsd64(_Decimal64 _X); | 
 
 
 
 
 | 1534 | _Decimal128 __cdecl fabsd128(_Decimal128 _X); | 
 
 
 
 
 | 1535 | _Decimal32 __cdecl fabsd32(_Decimal32 _X); | 
 
 
 
 
 | 1536 |  | 
 
 
 
 
 | 1537 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/copysignd64.3m.htm */ | 
 
 
 
 
 | 1538 | _Decimal64 __cdecl copysignd64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1539 | _Decimal128 __cdecl copysignd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1540 | _Decimal32 __cdecl copysignd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1541 |  | 
 
 
 
 
 | 1542 | /*** max, min, positive difference ***/ | 
 
 
 
 
 | 1543 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/fmaxd64.3m.htm */ | 
 
 
 
 
 | 1544 | _Decimal64 __cdecl fmaxd64(_Decimal64 _X, _Decimal64 y_Y); | 
 
 
 
 
 | 1545 | _Decimal128 __cdecl fmaxd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1546 | _Decimal32 __cdecl fmaxd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1547 |  | 
 
 
 
 
 | 1548 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/fmind64.3m.htm */ | 
 
 
 
 
 | 1549 | _Decimal64 __cdecl fmind64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1550 | _Decimal128 __cdecl fmind128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1551 | _Decimal32 __cdecl fmind32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1552 |  | 
 
 
 
 
 | 1553 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/fdimd64.3m.htm */ | 
 
 
 
 
 | 1554 | _Decimal64 __cdecl fdimd64(_Decimal64 _X, _Decimal64 _Y); | 
 
 
 
 
 | 1555 | _Decimal128 __cdecl fdimd128(_Decimal128 _X, _Decimal128 _Y); | 
 
 
 
 
 | 1556 | _Decimal32 __cdecl fdimd32(_Decimal32 _X, _Decimal32 _Y); | 
 
 
 
 
 | 1557 |  | 
 
 
 
 
 | 1558 | /*** not-a-number ***/ | 
 
 
 
 
 | 1559 | /* http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/nand64.3m.htm */ | 
 
 
 
 
 | 1560 | _Decimal64 __cdecl nand64(__UNUSED_PARAM(const char *_X)); | 
 
 
 
 
 | 1561 | _Decimal128 __cdecl nand128(__UNUSED_PARAM(const char *_X)); | 
 
 
 
 
 | 1562 | _Decimal32 __cdecl nand32(__UNUSED_PARAM(const char *_X)); | 
 
 
 
 
 | 1563 |  | 
 
 
 
 
 | 1564 | /*** classifiers ***/ | 
 
 
 
 
 | 1565 | int __cdecl isinfd64(_Decimal64 _X); | 
 
 
 
 
 | 1566 | int __cdecl isinfd128(_Decimal128 _X); | 
 
 
 
 
 | 1567 | int __cdecl isinfd32(_Decimal32 _X); | 
 
 
 
 
 | 1568 | int __cdecl isnand64(_Decimal64 _X); | 
 
 
 
 
 | 1569 | int __cdecl isnand128(_Decimal128 _X); | 
 
 
 
 
 | 1570 | int __cdecl isnand32(_Decimal32 _X); | 
 
 
 
 
 | 1571 |  | 
 
 
 
 
 | 1572 | #endif /* __STDC_WANT_DEC_FP__ */ | 
 
 
 
 
 | 1573 |  | 
 
 
 
 
 | 1574 | #ifdef __cplusplus | 
 
 
 
 
 | 1575 | } | 
 
 
 
 
 | 1576 | #endif | 
 
 
 
 
 | 1577 |  | 
 
 
 
 
 | 1578 | #endif  /* Not RC_INVOKED */ | 
 
 
 
 
 | 1579 |  | 
 
 
 
 
 | 1580 | #pragma pack(pop) | 
 
 
 
 
 | 1581 |  | 
 
 
 
 
 | 1582 | #endif /* End _MATH_H_ */ | 
 
 
 
 
 | 1583 |  |