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 #ifndef __STRICT_ANSI__ 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 1584