1 2 // automatically generated by m4 from headers in proto subdir 3 4 5 #ifndef __MATH_H__ 6 #define __MATH_H__ 7 8 // THE SELECTED FLOATING POINT PACKAGE MAY NOT SUPPORT ALL LISTED FUNCTIONS 9 10 #ifndef _FLOAT_T_DEFINED 11 #define _FLOAT_T_DEFINED 12 13 #ifdef __CLANG 14 typedef float float_t; 15 #endif 16 17 #ifdef __SDCC 18 typedef float float_t; 19 #endif 20 21 #ifdef __SCCZ80 22 typedef double float_t; 23 #endif 24 25 #endif 26 27 #ifndef _DOUBLE_T_DEFINED 28 #define _DOUBLE_T_DEFINED 29 30 #ifdef __CLANG 31 typedef float double_t; 32 #endif 33 34 #ifdef __SDCC 35 typedef float double_t; 36 #endif 37 38 #ifdef __SCCZ80 39 typedef double double_t; 40 #endif 41 42 #endif 43 44 #ifndef _FLOAT16_T_DEFINED 45 #define _FLOAT16_T_DEFINED 46 47 #ifndef __SCCZ80 48 typedef short _Float16; /* IEEE-754 half float type */ 49 #endif 50 51 typedef _Float16 half_t; 52 53 #endif 54 55 // XSI EXTENSION 56 // temporary : math lib should supply these via func call 57 58 #define M_E 2.718281828459 59 #define M_INVLN2 1.442695040889 /* 1 / log(2) */ 60 #define M_LOG2E 1.442695040889 61 #define M_IVLN10 0.434294481903 /* 1 / log(10) */ 62 #define M_LOG10E 0.434294481903 63 #define M_LOG2_E 0.693147180560 64 #define M_LN2 0.693147180560 65 #define M_LN10 2.302585092994 66 #define M_PI 3.141592653590 67 #define M_TWOPI 6.283185307180 68 #define M_PI_2 1.570796326795 69 #define M_PI_4 0.7853981633974 70 #define M_3PI_4 2.3561944901923 71 #define M_SQRTPI 1.7724538509055 72 #define M_1_PI 0.3183098861838 73 #define M_2_PI 0.6366197723676 74 #define M_4_PI 1.2732395447352 75 #define M_1_SQRTPI 0.5641895835478 76 #define M_2_SQRTPI 1.1283791670955 77 #define M_SQRT2 1.4142135623731 78 #define M_SQRT3 1.7320508075689 79 #define M_SQRT1_2 0.7071067811865 80 81 // 82 83 #define FLT_EVAL_METHOD 1 84 #define MATH_ERRNO 1 85 #define MATH_ERREXCEPT 2 86 #define math_errhandling 1 87 88 #ifdef __CLANG 89 90 #define HUGE_VAL (1.7014117331E+38) 91 #define HUGE_VALF (1.7014117331E+38) 92 #define INFINITY (1.7014117331E+38) 93 94 #endif 95 96 #ifdef __SDCC 97 98 #define HUGE_VAL (1.7014117331E+38) 99 #define HUGE_VALF (1.7014117331E+38) 100 #define INFINITY (1.7014117331E+38) 101 102 #endif 103 104 #ifdef __SCCZ80 105 106 #define HUGE_VAL (1.7014118346E+38) 107 #define HUGE_VALF (1.7014118346E+38) 108 #define INFINITY (1.7014118346E+38) 109 110 #endif 111 112 #ifdef __MATH_AM9511 113 114 #define HUGE_POS_F32 (+9.2e+18) 115 #define TINY_POS_F32 (+2.7e-20) 116 #define HUGE_NEG_F32 (-9.2e+18) 117 #define TINY_NEG_F32 (-2.7e-20) 118 119 #define MAXL2_F32 (+63.0) 120 #define MINL2_F32 (-64.0) 121 #define MAXLOG_F32 (+43.6657) 122 #define MINLOG_F32 (−45.0) 123 #define MAXL10_F32 (+18.9638) 124 #define MINL10_F32 (−19.5686) 125 126 #define HUGE_VAL_F32 (0x7F800000) 127 #define INFINITY_POS_F32 (0x7F800000) 128 #define INFINITY_NEG_F32 (0xFF800000) 129 130 #endif 131 132 #ifdef __MATH_MATH32 133 134 #define HUGE_POS_F32 (+3.4028234664E+38) 135 #define TINY_POS_F32 (+1.1754943508E−38) 136 #define HUGE_NEG_F32 (-1.7014118346E+38) 137 #define TINY_NEG_F32 (-1.1754943508E-38) 138 139 #define MAXL2_F32 (+127.999999914) 140 #define MINL2_F32 (-126.0) 141 #define MAXLOG_F32 (+88.722839052) 142 #define MINLOG_F32 (−87.336544751) 143 #define MAXL10_F32 (+38.230809449) 144 #define MINL10_F32 (−37.929779454) 145 146 #define HUGE_VAL_F32 (0x7F800000) 147 #define INFINITY_POS_F32 (0x7F800000) 148 #define INFINITY_NEG_F32 (0xFF800000) 149 150 #endif 151 152 #ifdef __MATH_MATH16 153 154 #define HUGE_POS_F16 (+6.5504E+4) /* 0x7BFF */ 155 #define TINY_POS_F16 (+6.10352E-5) /* 0x0400 */ 156 #define HUGE_NEG_F16 (-6.5504E+4) /* 0xFBFF */ 157 #define TINY_NEG_F16 (-6.10352E-5) /* 0x8400 */ 158 159 #define MAXL2_F16 (+15.999) /* 0x4BFF */ 160 #define MINL2_F16 (-14.00) /* 0xCB00 */ 161 #define MAXLOG_F16 (+11.086) /* 0x498B */ 162 #define MINLOG_F16 (-9.700) /* 0xC8DA */ 163 #define MAXL10_F16 (+4.816) /* 0x44D1 */ 164 #define MINL10_F16 (-4.215) /* 0xC437 */ 165 166 #define HUGE_VAL_F16 (0x7C00) 167 #define INFINITY_POS_F16 (0x7C00) 168 #define INFINITY_NEG_F16 (0xFC00) 169 170 #endif 171 172 extern double_t acos(double_t x); 173 174 175 extern double_t asin(double_t x); 176 177 178 extern double_t atan(double_t x); 179 180 181 extern double_t atan2(double_t y,double_t x); 182 183 184 185 extern double_t cos(double_t x); 186 187 188 extern double_t sin(double_t x); 189 190 191 extern double_t tan(double_t x); 192 193 194 195 extern double_t acosh(double_t x); 196 197 198 extern double_t asinh(double_t x); 199 200 201 extern double_t atanh(double_t x); 202 203 204 205 extern double_t cosh(double_t x); 206 207 208 extern double_t sinh(double_t x); 209 210 211 extern double_t tanh(double_t x); 212 213 214 215 extern double_t exp(double_t x); 216 217 218 extern double_t exp2(double_t x); 219 220 221 extern double_t expm1(double_t x); 222 223 224 extern double_t frexp(double_t value,int *exp); 225 226 227 extern int ilogb(double_t x); 228 229 230 extern double_t ldexp(double_t x,int exp); 231 232 233 extern double_t scalbn(double_t x,int n); 234 235 236 extern double_t scalbln(double_t x,int n); 237 238 239 240 extern double_t log(double_t x); 241 242 243 extern double_t log10(double_t x); 244 245 246 extern double_t log1p(double_t x); 247 248 249 extern double_t log2(double_t x); 250 251 252 extern double_t logb(double_t x); 253 254 255 256 extern double_t fabs(double_t x); 257 258 259 extern double_t hypot(double_t x,double_t y); 260 261 262 263 extern double_t pow(double_t x,double_t y); 264 265 266 extern double_t sqrt(double_t x); 267 268 269 extern double_t cbrt(double_t x); 270 271 272 273 extern double_t erf(double_t x); 274 275 276 extern double_t erfc(double_t x); 277 278 279 extern double_t lgamma(double_t x); 280 281 282 extern double_t tgamma(double_t x); 283 284 285 286 extern double_t ceil(double_t x); 287 288 289 extern double_t floor(double_t x); 290 291 292 extern double_t nearbyint(double_t x); 293 294 295 extern double_t rint(double_t x); 296 297 298 extern long lrint(double_t x); 299 300 301 extern double_t round(double_t x); 302 303 304 extern long lround(double_t x); 305 306 307 extern double_t trunc(double_t x); 308 309 310 311 extern double_t modf(double_t value,double_t *iptr); 312 313 314 extern double_t fmod(double_t x,double_t y); 315 316 317 extern double_t remainder(double_t x,double_t y); 318 319 320 extern double_t remquo(double_t x,double_t y,int *quo); 321 322 323 324 extern double_t copysign(double_t x,double_t y); 325 326 327 extern double_t nan(const char *tagp); 328 329 330 331 extern double_t nextafter(double_t x,double_t y); 332 333 334 extern double_t nexttoward(double_t x,double_t y); 335 336 337 338 extern double_t fdim(double_t x,double_t y); 339 340 341 342 extern double_t fmax(double_t x,double_t y); 343 344 345 extern double_t fmin(double_t x,double_t y); 346 347 348 349 extern double_t fma(double_t x,double_t y,double_t z); 350 351 352 353 extern int isgreater(double_t x,double_t y); 354 355 356 extern int isgreaterequal(double_t x,double_t y); 357 358 359 extern int isless(double_t x,double_t y); 360 361 362 extern int islessequal(double_t x,double_t y); 363 364 365 extern int islessgreater(double_t x,double_t y); 366 367 368 extern int isunordered(double_t x,double_t y); 369 370 371 372 #ifdef __MATH_MATH32 373 374 extern double_t sqr(double_t x); 375 376 377 extern double_t inv(double_t x); 378 379 380 extern double_t invsqrt(double_t x); 381 382 383 extern double_t div2(double_t x); 384 385 386 extern double_t mul2(double_t x); 387 388 389 extern double_t mul10u(double_t x); 390 391 392 extern double_t exp10(double_t x); 393 394 395 extern double_t poly(const float x,const float d[],unsigned int n); 396 397 398 399 #endif 400 401 #ifdef __MATH_AM9511 402 403 extern double_t f32_fam9511(double_t x); 404 405 406 extern double_t fam9511_f32(double_t x); 407 408 409 extern double_t sqr(double_t x); 410 411 412 extern double_t div2(double_t x); 413 414 415 extern double_t mul2(double_t x); 416 417 418 extern double_t mul10u(double_t x); 419 420 421 extern double_t exp10(double_t x); 422 423 424 425 #endif 426 427 #ifdef __MATH_MATH16 428 429 extern half_t f16_f48(double_t x); 430 431 432 extern double_t f48_f16(half_t x); 433 434 435 436 extern half_t f16_f32(float_t x); 437 438 439 extern float_t f32_f16(half_t x); 440 441 442 443 extern int16_t i16_f16(half_t x); 444 445 446 extern uint16_t u16_f16(half_t x); 447 448 449 extern int32_t i32_f16(half_t x); 450 451 452 extern uint32_t u32_f16(half_t x); 453 454 455 456 extern half_t f16_i8(int8_t x); 457 458 459 extern half_t f16_i16(int16_t x); 460 461 462 extern half_t f16_i32(int32_t x); 463 464 465 extern half_t f16_u8(uint8_t x); 466 467 468 extern half_t f16_u16(uint16_t x); 469 470 471 extern half_t f16_u32(uint32_t x); 472 473 474 475 extern half_t addf16(half_t x,half_t y); 476 477 478 extern half_t subf16(half_t x,half_t y); 479 480 481 extern half_t mulf16(half_t x,half_t y); 482 483 484 extern half_t divf16(half_t x,half_t y); 485 486 487 488 extern half_t fmaf16(half_t x,half_t y,half_t z); 489 490 491 extern half_t polyf16(half_t x,float_t d[],uint16_t n); 492 493 494 extern half_t hypotf16(half_t x,half_t y); 495 496 497 498 extern half_t invf16(half_t x); 499 500 501 extern half_t invsqrtf16(half_t x); 502 503 504 505 extern half_t sqrtf16(half_t x); 506 507 508 509 extern half_t div2f16(half_t x); 510 511 512 extern half_t mul2f16(half_t x); 513 514 515 extern half_t mul10f16(half_t x); 516 517 518 extern half_t frexpf16(half_t x,int8_t *pw2); 519 520 521 extern half_t ldexpf16(half_t x,int16_t pw2); 522 523 524 525 extern half_t acosf16(half_t x); 526 527 528 extern half_t asinf16(half_t x); 529 530 531 extern half_t atanf16(half_t x); 532 533 534 535 extern half_t cosf16(half_t x); 536 537 538 extern half_t sinf16(half_t x); 539 540 541 extern half_t tanf16(half_t x); 542 543 544 545 extern half_t expf16(half_t x); 546 547 548 extern half_t exp2f16(half_t x); 549 550 551 extern half_t exp10f16(half_t x); 552 553 554 extern half_t logf16(half_t x); 555 556 557 extern half_t log2f16(half_t x); 558 559 560 extern half_t log10f16(half_t x); 561 562 563 extern half_t powf16(half_t x,half_t y); 564 565 566 567 extern half_t fabsf16(half_t x); 568 569 570 extern half_t negf16(half_t x); 571 572 573 extern half_t ceilf16(half_t x); 574 575 576 extern half_t floorf16(half_t x); 577 578 579 580 extern int isgreaterf16(half_t x,half_t y); 581 582 583 extern int isgreaterequalf16(half_t x,half_t y); 584 585 586 extern int islessf16(half_t x,half_t y); 587 588 589 extern int islessequalf16(half_t x,half_t y); 590 591 592 extern int islessgreaterf16(half_t x,half_t y); 593 594 595 extern int isnotequalf16(half_t x,half_t y); 596 597 598 extern int isunorderedf16(half_t x,half_t y); 599 600 601 602 #define scalbnf16(x,pw2) ldexpf16(x,pw2) 603 604 #define truncf16(a) (a>0.?floorf16(a):ceilf16(a)) 605 #define roundf16(a) (a>0.?floorf16(a+0.5):ceilf16(a-0.5)) 606 #define rintf16(a) ceilf16(a) 607 608 #endif 609 610 // NO DISTINCTION BETWEEN FLOAT AND DOUBLE 611 612 #define acosf acos 613 #define asinf asin 614 #define atanf atan 615 #define atan2f atan2 616 617 #define cosf cos 618 #define sinf sin 619 #define tanf tan 620 621 #define acoshf acosh 622 #define asinhf asinh 623 #define atanhf atanh 624 625 #define coshf cosh 626 #define sinhf sinh 627 #define tanhf tanh 628 629 #define expf exp 630 #define exp2f exp2 631 #define exp10f exp10 632 #define expm1f expm1 633 #define frexpf frexp 634 #define ilogbf ilogb 635 #define ldexpf ldexp 636 637 #define logf log 638 #define log2f log2 639 #define log10f log10 640 #define log1pf log1p 641 #define logbf logb 642 643 #define scalbnf scalbn 644 #define scalblnf scalbln 645 646 #define fabsf fabs 647 #define hypotf hypot 648 649 #define powf pow 650 #define sqrtf sqrt 651 #define cbrtf cbrt 652 653 #define erff erf 654 #define erfcf erfc 655 #define lgammaf lgamma 656 #define tgammaf tgamma 657 658 #define ceilf ceil 659 #define floorf floor 660 #define nearbyintf nearbyint 661 #define rintf rint 662 #define lrintf lrint 663 #define llrintf llrint 664 #define roundf round 665 #define lroundf lround 666 #define llroundf llround 667 #define truncf trunc 668 669 #define modff modf 670 #define fmodf fmod 671 #define remainderf remainder 672 #define remquof remquo 673 674 #define copysignf copysign 675 #define nanf nan 676 677 #define nextafterf nextafter 678 #define nexttowardf nexttoward 679 680 #define fdimf fdim 681 682 #define fmaxf fmax 683 #define fminf fmin 684 685 #define fmaf fma 686 687 #ifdef __MATH_MATH32 688 689 #define sqrf sqr 690 #define invf inv 691 #define invsqrtf insqrt 692 #define div2f div2 693 #define mul2f mul2 694 #define mul10uf mul10u 695 #define exp10f exp10 696 #define polyf poly 697 698 #endif 699 700 #ifdef __MATH_AM9511 701 702 #define sqrf sqr 703 #define div2f div2 704 #define mul2f mul2 705 #define mul10uf mul10u 706 #define exp10f exp10 707 708 #endif 709 710 #endif 711