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 }