00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #if defined(LIBM_SCCS) && !defined(lint)
00014 static char rcsid[] = "$NetBSD: k_standard.c,v 1.6 1995/05/10 20:46:35 jtc Exp $";
00015 #endif
00016
00017 #include "math.h"
00018 #include "mathP.h"
00019 #include <linux/errno.h>
00020
00021 extern int libm_errno;
00022
00023 extern int printk(const char *, ...);
00024
00025 #define WRITE2(u,v) printk("%.*s",v,u)
00026
00027 #ifdef __STDC__
00028 static const double zero = 0.0;
00029 #else
00030 static double zero = 0.0;
00031 #endif
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 #ifdef __STDC__
00082 double __kernel_standard(double x, double y, int type)
00083 #else
00084 double __kernel_standard(x,y,type)
00085 double x,y; int type;
00086 #endif
00087 {
00088 struct exception exc;
00089 #ifndef HUGE_VAL
00090 #define HUGE_VAL inf
00091 double inf = 0.0;
00092
00093 SET_HIGH_WORD(inf,0x7ff00000);
00094 #endif
00095
00096 exc.arg1 = x;
00097 exc.arg2 = y;
00098 switch(type) {
00099 case 1:
00100 case 101:
00101
00102 exc.type = DOMAIN;
00103 exc.name = type < 100 ? "acos" : "acosf";
00104 exc.retval = zero;
00105 if (_LIB_VERSION == _POSIX_)
00106 libm_errno = EDOM;
00107 else if (!matherr(&exc)) {
00108 if(_LIB_VERSION == _SVID_) {
00109 (void) WRITE2("acos: DOMAIN error\n", 19);
00110 }
00111 libm_errno = EDOM;
00112 }
00113 break;
00114 case 2:
00115 case 102:
00116
00117 exc.type = DOMAIN;
00118 exc.name = type < 100 ? "asin" : "asinf";
00119 exc.retval = zero;
00120 if(_LIB_VERSION == _POSIX_)
00121 libm_errno = EDOM;
00122 else if (!matherr(&exc)) {
00123 if(_LIB_VERSION == _SVID_) {
00124 (void) WRITE2("asin: DOMAIN error\n", 19);
00125 }
00126 libm_errno = EDOM;
00127 }
00128 break;
00129 case 3:
00130 case 103:
00131
00132 exc.arg1 = y;
00133 exc.arg2 = x;
00134 exc.type = DOMAIN;
00135 exc.name = type < 100 ? "atan2" : "atan2f";
00136 exc.retval = zero;
00137 if(_LIB_VERSION == _POSIX_)
00138 libm_errno = EDOM;
00139 else if (!matherr(&exc)) {
00140 if(_LIB_VERSION == _SVID_) {
00141 (void) WRITE2("atan2: DOMAIN error\n", 20);
00142 }
00143 libm_errno = EDOM;
00144 }
00145 break;
00146 case 4:
00147 case 104:
00148
00149 exc.type = OVERFLOW;
00150 exc.name = type < 100 ? "hypot" : "hypotf";
00151 if (_LIB_VERSION == _SVID_)
00152 exc.retval = HUGE;
00153 else
00154 exc.retval = HUGE_VAL;
00155 if (_LIB_VERSION == _POSIX_)
00156 libm_errno = ERANGE;
00157 else if (!matherr(&exc)) {
00158 libm_errno = ERANGE;
00159 }
00160 break;
00161 case 5:
00162 case 105:
00163
00164 exc.type = OVERFLOW;
00165 exc.name = type < 100 ? "cosh" : "coshf";
00166 if (_LIB_VERSION == _SVID_)
00167 exc.retval = HUGE;
00168 else
00169 exc.retval = HUGE_VAL;
00170 if (_LIB_VERSION == _POSIX_)
00171 libm_errno = ERANGE;
00172 else if (!matherr(&exc)) {
00173 libm_errno = ERANGE;
00174 }
00175 break;
00176 case 6:
00177 case 106:
00178
00179 exc.type = OVERFLOW;
00180 exc.name = type < 100 ? "exp" : "expf";
00181 if (_LIB_VERSION == _SVID_)
00182 exc.retval = HUGE;
00183 else
00184 exc.retval = HUGE_VAL;
00185 if (_LIB_VERSION == _POSIX_)
00186 libm_errno = ERANGE;
00187 else if (!matherr(&exc)) {
00188 libm_errno = ERANGE;
00189 }
00190 break;
00191 case 7:
00192 case 107:
00193
00194 exc.type = UNDERFLOW;
00195 exc.name = type < 100 ? "exp" : "expf";
00196 exc.retval = zero;
00197 if (_LIB_VERSION == _POSIX_)
00198 libm_errno = ERANGE;
00199 else if (!matherr(&exc)) {
00200 libm_errno = ERANGE;
00201 }
00202 break;
00203 case 8:
00204 case 108:
00205
00206 exc.type = DOMAIN;
00207 exc.name = type < 100 ? "y0" : "y0f";
00208 if (_LIB_VERSION == _SVID_)
00209 exc.retval = -HUGE;
00210 else
00211 exc.retval = -HUGE_VAL;
00212 if (_LIB_VERSION == _POSIX_)
00213 libm_errno = EDOM;
00214 else if (!matherr(&exc)) {
00215 if (_LIB_VERSION == _SVID_) {
00216 (void) WRITE2("y0: DOMAIN error\n", 17);
00217 }
00218 libm_errno = EDOM;
00219 }
00220 break;
00221 case 9:
00222 case 109:
00223
00224 exc.type = DOMAIN;
00225 exc.name = type < 100 ? "y0" : "y0f";
00226 if (_LIB_VERSION == _SVID_)
00227 exc.retval = -HUGE;
00228 else
00229 exc.retval = -HUGE_VAL;
00230 if (_LIB_VERSION == _POSIX_)
00231 libm_errno = EDOM;
00232 else if (!matherr(&exc)) {
00233 if (_LIB_VERSION == _SVID_) {
00234 (void) WRITE2("y0: DOMAIN error\n", 17);
00235 }
00236 libm_errno = EDOM;
00237 }
00238 break;
00239 case 10:
00240 case 110:
00241
00242 exc.type = DOMAIN;
00243 exc.name = type < 100 ? "y1" : "y1f";
00244 if (_LIB_VERSION == _SVID_)
00245 exc.retval = -HUGE;
00246 else
00247 exc.retval = -HUGE_VAL;
00248 if (_LIB_VERSION == _POSIX_)
00249 libm_errno = EDOM;
00250 else if (!matherr(&exc)) {
00251 if (_LIB_VERSION == _SVID_) {
00252 (void) WRITE2("y1: DOMAIN error\n", 17);
00253 }
00254 libm_errno = EDOM;
00255 }
00256 break;
00257 case 11:
00258 case 111:
00259
00260 exc.type = DOMAIN;
00261 exc.name = type < 100 ? "y1" : "y1f";
00262 if (_LIB_VERSION == _SVID_)
00263 exc.retval = -HUGE;
00264 else
00265 exc.retval = -HUGE_VAL;
00266 if (_LIB_VERSION == _POSIX_)
00267 libm_errno = EDOM;
00268 else if (!matherr(&exc)) {
00269 if (_LIB_VERSION == _SVID_) {
00270 (void) WRITE2("y1: DOMAIN error\n", 17);
00271 }
00272 libm_errno = EDOM;
00273 }
00274 break;
00275 case 12:
00276 case 112:
00277
00278 exc.type = DOMAIN;
00279 exc.name = type < 100 ? "yn" : "ynf";
00280 if (_LIB_VERSION == _SVID_)
00281 exc.retval = -HUGE;
00282 else
00283 exc.retval = -HUGE_VAL;
00284 if (_LIB_VERSION == _POSIX_)
00285 libm_errno = EDOM;
00286 else if (!matherr(&exc)) {
00287 if (_LIB_VERSION == _SVID_) {
00288 (void) WRITE2("yn: DOMAIN error\n", 17);
00289 }
00290 libm_errno = EDOM;
00291 }
00292 break;
00293 case 13:
00294 case 113:
00295
00296 exc.type = DOMAIN;
00297 exc.name = type < 100 ? "yn" : "ynf";
00298 if (_LIB_VERSION == _SVID_)
00299 exc.retval = -HUGE;
00300 else
00301 exc.retval = -HUGE_VAL;
00302 if (_LIB_VERSION == _POSIX_)
00303 libm_errno = EDOM;
00304 else if (!matherr(&exc)) {
00305 if (_LIB_VERSION == _SVID_) {
00306 (void) WRITE2("yn: DOMAIN error\n", 17);
00307 }
00308 libm_errno = EDOM;
00309 }
00310 break;
00311 case 14:
00312 case 114:
00313
00314 exc.type = OVERFLOW;
00315 exc.name = type < 100 ? "lgamma" : "lgammaf";
00316 if (_LIB_VERSION == _SVID_)
00317 exc.retval = HUGE;
00318 else
00319 exc.retval = HUGE_VAL;
00320 if (_LIB_VERSION == _POSIX_)
00321 libm_errno = ERANGE;
00322 else if (!matherr(&exc)) {
00323 libm_errno = ERANGE;
00324 }
00325 break;
00326 case 15:
00327 case 115:
00328
00329 exc.type = SING;
00330 exc.name = type < 100 ? "lgamma" : "lgammaf";
00331 if (_LIB_VERSION == _SVID_)
00332 exc.retval = HUGE;
00333 else
00334 exc.retval = HUGE_VAL;
00335 if (_LIB_VERSION == _POSIX_)
00336 libm_errno = EDOM;
00337 else if (!matherr(&exc)) {
00338 if (_LIB_VERSION == _SVID_) {
00339 (void) WRITE2("lgamma: SING error\n", 19);
00340 }
00341 libm_errno = EDOM;
00342 }
00343 break;
00344 case 16:
00345 case 116:
00346
00347 exc.type = SING;
00348 exc.name = type < 100 ? "log" : "logf";
00349 if (_LIB_VERSION == _SVID_)
00350 exc.retval = -HUGE;
00351 else
00352 exc.retval = -HUGE_VAL;
00353 if (_LIB_VERSION == _POSIX_)
00354 libm_errno = ERANGE;
00355 else if (!matherr(&exc)) {
00356 if (_LIB_VERSION == _SVID_) {
00357 (void) WRITE2("log: SING error\n", 16);
00358 }
00359 libm_errno = EDOM;
00360 }
00361 break;
00362 case 17:
00363 case 117:
00364
00365 exc.type = DOMAIN;
00366 exc.name = type < 100 ? "log" : "logf";
00367 if (_LIB_VERSION == _SVID_)
00368 exc.retval = -HUGE;
00369 else
00370 exc.retval = -HUGE_VAL;
00371 if (_LIB_VERSION == _POSIX_)
00372 libm_errno = EDOM;
00373 else if (!matherr(&exc)) {
00374 if (_LIB_VERSION == _SVID_) {
00375 (void) WRITE2("log: DOMAIN error\n", 18);
00376 }
00377 libm_errno = EDOM;
00378 }
00379 break;
00380 case 18:
00381 case 118:
00382
00383 exc.type = SING;
00384 exc.name = type < 100 ? "log10" : "log10f";
00385 if (_LIB_VERSION == _SVID_)
00386 exc.retval = -HUGE;
00387 else
00388 exc.retval = -HUGE_VAL;
00389 if (_LIB_VERSION == _POSIX_)
00390 libm_errno = ERANGE;
00391 else if (!matherr(&exc)) {
00392 if (_LIB_VERSION == _SVID_) {
00393 (void) WRITE2("log10: SING error\n", 18);
00394 }
00395 libm_errno = EDOM;
00396 }
00397 break;
00398 case 19:
00399 case 119:
00400
00401 exc.type = DOMAIN;
00402 exc.name = type < 100 ? "log10" : "log10f";
00403 if (_LIB_VERSION == _SVID_)
00404 exc.retval = -HUGE;
00405 else
00406 exc.retval = -HUGE_VAL;
00407 if (_LIB_VERSION == _POSIX_)
00408 libm_errno = EDOM;
00409 else if (!matherr(&exc)) {
00410 if (_LIB_VERSION == _SVID_) {
00411 (void) WRITE2("log10: DOMAIN error\n", 20);
00412 }
00413 libm_errno = EDOM;
00414 }
00415 break;
00416 case 20:
00417 case 120:
00418
00419
00420 exc.type = DOMAIN;
00421 exc.name = type < 100 ? "pow" : "powf";
00422 exc.retval = zero;
00423 if (_LIB_VERSION != _SVID_) exc.retval = 1.0;
00424 else if (!matherr(&exc)) {
00425 (void) WRITE2("pow(0,0): DOMAIN error\n", 23);
00426 libm_errno = EDOM;
00427 }
00428 break;
00429 case 21:
00430 case 121:
00431
00432 exc.type = OVERFLOW;
00433 exc.name = type < 100 ? "pow" : "powf";
00434 if (_LIB_VERSION == _SVID_) {
00435 exc.retval = HUGE;
00436 y *= 0.5;
00437 if(x<zero&&rint(y)!=y) exc.retval = -HUGE;
00438 } else {
00439 exc.retval = HUGE_VAL;
00440 y *= 0.5;
00441 if(x<zero&&rint(y)!=y) exc.retval = -HUGE_VAL;
00442 }
00443 if (_LIB_VERSION == _POSIX_)
00444 libm_errno = ERANGE;
00445 else if (!matherr(&exc)) {
00446 libm_errno = ERANGE;
00447 }
00448 break;
00449 case 22:
00450 case 122:
00451
00452 exc.type = UNDERFLOW;
00453 exc.name = type < 100 ? "pow" : "powf";
00454 exc.retval = zero;
00455 if (_LIB_VERSION == _POSIX_)
00456 libm_errno = ERANGE;
00457 else if (!matherr(&exc)) {
00458 libm_errno = ERANGE;
00459 }
00460 break;
00461 case 23:
00462 case 123:
00463
00464 exc.type = DOMAIN;
00465 exc.name = type < 100 ? "pow" : "powf";
00466 if (_LIB_VERSION == _SVID_)
00467 exc.retval = zero;
00468 else
00469 exc.retval = -HUGE_VAL;
00470 if (_LIB_VERSION == _POSIX_)
00471 libm_errno = EDOM;
00472 else if (!matherr(&exc)) {
00473 if (_LIB_VERSION == _SVID_) {
00474 (void) WRITE2("pow(0,neg): DOMAIN error\n", 25);
00475 }
00476 libm_errno = EDOM;
00477 }
00478 break;
00479 case 24:
00480 case 124:
00481
00482 exc.type = DOMAIN;
00483 exc.name = type < 100 ? "pow" : "powf";
00484 if (_LIB_VERSION == _SVID_)
00485 exc.retval = zero;
00486 else
00487 exc.retval = zero/zero;
00488 if (_LIB_VERSION == _POSIX_)
00489 libm_errno = EDOM;
00490 else if (!matherr(&exc)) {
00491 if (_LIB_VERSION == _SVID_) {
00492 (void) WRITE2("neg**non-integral: DOMAIN error\n", 32);
00493 }
00494 libm_errno = EDOM;
00495 }
00496 break;
00497 case 25:
00498 case 125:
00499
00500 exc.type = OVERFLOW;
00501 exc.name = type < 100 ? "sinh" : "sinhf";
00502 if (_LIB_VERSION == _SVID_)
00503 exc.retval = ( (x>zero) ? HUGE : -HUGE);
00504 else
00505 exc.retval = ( (x>zero) ? HUGE_VAL : -HUGE_VAL);
00506 if (_LIB_VERSION == _POSIX_)
00507 libm_errno = ERANGE;
00508 else if (!matherr(&exc)) {
00509 libm_errno = ERANGE;
00510 }
00511 break;
00512 case 26:
00513 case 126:
00514
00515 exc.type = DOMAIN;
00516 exc.name = type < 100 ? "sqrt" : "sqrtf";
00517 if (_LIB_VERSION == _SVID_)
00518 exc.retval = zero;
00519 else
00520 exc.retval = zero/zero;
00521 if (_LIB_VERSION == _POSIX_)
00522 libm_errno = EDOM;
00523 else if (!matherr(&exc)) {
00524 if (_LIB_VERSION == _SVID_) {
00525 (void) WRITE2("sqrt: DOMAIN error\n", 19);
00526 }
00527 libm_errno = EDOM;
00528 }
00529 break;
00530 case 27:
00531 case 127:
00532
00533 exc.type = DOMAIN;
00534 exc.name = type < 100 ? "fmod" : "fmodf";
00535 if (_LIB_VERSION == _SVID_)
00536 exc.retval = x;
00537 else
00538 exc.retval = zero/zero;
00539 if (_LIB_VERSION == _POSIX_)
00540 libm_errno = EDOM;
00541 else if (!matherr(&exc)) {
00542 if (_LIB_VERSION == _SVID_) {
00543 (void) WRITE2("fmod: DOMAIN error\n", 20);
00544 }
00545 libm_errno = EDOM;
00546 }
00547 break;
00548 case 28:
00549 case 128:
00550
00551 exc.type = DOMAIN;
00552 exc.name = type < 100 ? "remainder" : "remainderf";
00553 exc.retval = zero/zero;
00554 if (_LIB_VERSION == _POSIX_)
00555 libm_errno = EDOM;
00556 else if (!matherr(&exc)) {
00557 if (_LIB_VERSION == _SVID_) {
00558 (void) WRITE2("remainder: DOMAIN error\n", 24);
00559 }
00560 libm_errno = EDOM;
00561 }
00562 break;
00563 case 29:
00564 case 129:
00565
00566 exc.type = DOMAIN;
00567 exc.name = type < 100 ? "acosh" : "acoshf";
00568 exc.retval = zero/zero;
00569 if (_LIB_VERSION == _POSIX_)
00570 libm_errno = EDOM;
00571 else if (!matherr(&exc)) {
00572 if (_LIB_VERSION == _SVID_) {
00573 (void) WRITE2("acosh: DOMAIN error\n", 20);
00574 }
00575 libm_errno = EDOM;
00576 }
00577 break;
00578 case 30:
00579 case 130:
00580
00581 exc.type = DOMAIN;
00582 exc.name = type < 100 ? "atanh" : "atanhf";
00583 exc.retval = zero/zero;
00584 if (_LIB_VERSION == _POSIX_)
00585 libm_errno = EDOM;
00586 else if (!matherr(&exc)) {
00587 if (_LIB_VERSION == _SVID_) {
00588 (void) WRITE2("atanh: DOMAIN error\n", 20);
00589 }
00590 libm_errno = EDOM;
00591 }
00592 break;
00593 case 31:
00594 case 131:
00595
00596 exc.type = SING;
00597 exc.name = type < 100 ? "atanh" : "atanhf";
00598 exc.retval = x/zero;
00599 if (_LIB_VERSION == _POSIX_)
00600 libm_errno = EDOM;
00601 else if (!matherr(&exc)) {
00602 if (_LIB_VERSION == _SVID_) {
00603 (void) WRITE2("atanh: SING error\n", 18);
00604 }
00605 libm_errno = EDOM;
00606 }
00607 break;
00608 case 32:
00609 case 132:
00610
00611 exc.type = OVERFLOW;
00612 exc.name = type < 100 ? "scalb" : "scalbf";
00613 exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL;
00614 if (_LIB_VERSION == _POSIX_)
00615 libm_errno = ERANGE;
00616 else if (!matherr(&exc)) {
00617 libm_errno = ERANGE;
00618 }
00619 break;
00620 case 33:
00621 case 133:
00622
00623 exc.type = UNDERFLOW;
00624 exc.name = type < 100 ? "scalb" : "scalbf";
00625 exc.retval = copysign(zero,x);
00626 if (_LIB_VERSION == _POSIX_)
00627 libm_errno = ERANGE;
00628 else if (!matherr(&exc)) {
00629 libm_errno = ERANGE;
00630 }
00631 break;
00632 case 34:
00633 case 134:
00634
00635 exc.type = TLOSS;
00636 exc.name = type < 100 ? "j0" : "j0f";
00637 exc.retval = zero;
00638 if (_LIB_VERSION == _POSIX_)
00639 libm_errno = ERANGE;
00640 else if (!matherr(&exc)) {
00641 if (_LIB_VERSION == _SVID_) {
00642 (void) WRITE2(exc.name, 2);
00643 (void) WRITE2(": TLOSS error\n", 14);
00644 }
00645 libm_errno = ERANGE;
00646 }
00647 break;
00648 case 35:
00649 case 135:
00650
00651 exc.type = TLOSS;
00652 exc.name = type < 100 ? "y0" : "y0f";
00653 exc.retval = zero;
00654 if (_LIB_VERSION == _POSIX_)
00655 libm_errno = ERANGE;
00656 else if (!matherr(&exc)) {
00657 if (_LIB_VERSION == _SVID_) {
00658 (void) WRITE2(exc.name, 2);
00659 (void) WRITE2(": TLOSS error\n", 14);
00660 }
00661 libm_errno = ERANGE;
00662 }
00663 break;
00664 case 36:
00665 case 136:
00666
00667 exc.type = TLOSS;
00668 exc.name = type < 100 ? "j1" : "j1f";
00669 exc.retval = zero;
00670 if (_LIB_VERSION == _POSIX_)
00671 libm_errno = ERANGE;
00672 else if (!matherr(&exc)) {
00673 if (_LIB_VERSION == _SVID_) {
00674 (void) WRITE2(exc.name, 2);
00675 (void) WRITE2(": TLOSS error\n", 14);
00676 }
00677 libm_errno = ERANGE;
00678 }
00679 break;
00680 case 37:
00681 case 137:
00682
00683 exc.type = TLOSS;
00684 exc.name = type < 100 ? "y1" : "y1f";
00685 exc.retval = zero;
00686 if (_LIB_VERSION == _POSIX_)
00687 libm_errno = ERANGE;
00688 else if (!matherr(&exc)) {
00689 if (_LIB_VERSION == _SVID_) {
00690 (void) WRITE2(exc.name, 2);
00691 (void) WRITE2(": TLOSS error\n", 14);
00692 }
00693 libm_errno = ERANGE;
00694 }
00695 break;
00696 case 38:
00697 case 138:
00698
00699 exc.type = TLOSS;
00700 exc.name = type < 100 ? "jn" : "jnf";
00701 exc.retval = zero;
00702 if (_LIB_VERSION == _POSIX_)
00703 libm_errno = ERANGE;
00704 else if (!matherr(&exc)) {
00705 if (_LIB_VERSION == _SVID_) {
00706 (void) WRITE2(exc.name, 2);
00707 (void) WRITE2(": TLOSS error\n", 14);
00708 }
00709 libm_errno = ERANGE;
00710 }
00711 break;
00712 case 39:
00713 case 139:
00714
00715 exc.type = TLOSS;
00716 exc.name = type < 100 ? "yn" : "ynf";
00717 exc.retval = zero;
00718 if (_LIB_VERSION == _POSIX_)
00719 libm_errno = ERANGE;
00720 else if (!matherr(&exc)) {
00721 if (_LIB_VERSION == _SVID_) {
00722 (void) WRITE2(exc.name, 2);
00723 (void) WRITE2(": TLOSS error\n", 14);
00724 }
00725 libm_errno = ERANGE;
00726 }
00727 break;
00728 case 40:
00729 case 140:
00730
00731 exc.type = OVERFLOW;
00732 exc.name = type < 100 ? "gamma" : "gammaf";
00733 if (_LIB_VERSION == _SVID_)
00734 exc.retval = HUGE;
00735 else
00736 exc.retval = HUGE_VAL;
00737 if (_LIB_VERSION == _POSIX_)
00738 libm_errno = ERANGE;
00739 else if (!matherr(&exc)) {
00740 libm_errno = ERANGE;
00741 }
00742 break;
00743 case 41:
00744 case 141:
00745
00746 exc.type = SING;
00747 exc.name = type < 100 ? "gamma" : "gammaf";
00748 if (_LIB_VERSION == _SVID_)
00749 exc.retval = HUGE;
00750 else
00751 exc.retval = HUGE_VAL;
00752 if (_LIB_VERSION == _POSIX_)
00753 libm_errno = EDOM;
00754 else if (!matherr(&exc)) {
00755 if (_LIB_VERSION == _SVID_) {
00756 (void) WRITE2("gamma: SING error\n", 18);
00757 }
00758 libm_errno = EDOM;
00759 }
00760 break;
00761 case 42:
00762 case 142:
00763
00764
00765 exc.type = DOMAIN;
00766 exc.name = type < 100 ? "pow" : "powf";
00767 exc.retval = x;
00768 if (_LIB_VERSION == _IEEE_ ||
00769 _LIB_VERSION == _POSIX_) exc.retval = 1.0;
00770 else if (!matherr(&exc)) {
00771 libm_errno = EDOM;
00772 }
00773 break;
00774 }
00775 return exc.retval;
00776 }