1*1e651e1eSRoland Levillain 2*1e651e1eSRoland Levillain /* @(#)k_standard.c 1.3 95/01/18 */ 3*1e651e1eSRoland Levillain /* 4*1e651e1eSRoland Levillain * ==================================================== 5*1e651e1eSRoland Levillain * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 6*1e651e1eSRoland Levillain * 7*1e651e1eSRoland Levillain * Developed at SunSoft, a Sun Microsystems, Inc. business. 8*1e651e1eSRoland Levillain * Permission to use, copy, modify, and distribute this 9*1e651e1eSRoland Levillain * software is freely granted, provided that this notice 10*1e651e1eSRoland Levillain * is preserved. 11*1e651e1eSRoland Levillain * ==================================================== 12*1e651e1eSRoland Levillain * 13*1e651e1eSRoland Levillain */ 14*1e651e1eSRoland Levillain 15*1e651e1eSRoland Levillain #include "fdlibm.h" 16*1e651e1eSRoland Levillain #include <errno.h> 17*1e651e1eSRoland Levillain 18*1e651e1eSRoland Levillain #ifndef _USE_WRITE 19*1e651e1eSRoland Levillain #include <stdio.h> /* fputs(), stderr */ 20*1e651e1eSRoland Levillain #define WRITE2(u,v) fputs(u, stderr) 21*1e651e1eSRoland Levillain #else /* !defined(_USE_WRITE) */ 22*1e651e1eSRoland Levillain #include <unistd.h> /* write */ 23*1e651e1eSRoland Levillain #define WRITE2(u,v) write(2, u, v) 24*1e651e1eSRoland Levillain #undef fflush 25*1e651e1eSRoland Levillain #endif /* !defined(_USE_WRITE) */ 26*1e651e1eSRoland Levillain 27*1e651e1eSRoland Levillain static double zero = 0.0; /* used as const */ 28*1e651e1eSRoland Levillain 29*1e651e1eSRoland Levillain /* 30*1e651e1eSRoland Levillain * Standard conformance (non-IEEE) on exception cases. 31*1e651e1eSRoland Levillain * Mapping: 32*1e651e1eSRoland Levillain * 1 -- ieee_acos(|x|>1) 33*1e651e1eSRoland Levillain * 2 -- ieee_asin(|x|>1) 34*1e651e1eSRoland Levillain * 3 -- ieee_atan2(+-0,+-0) 35*1e651e1eSRoland Levillain * 4 -- hypot overflow 36*1e651e1eSRoland Levillain * 5 -- cosh overflow 37*1e651e1eSRoland Levillain * 6 -- exp overflow 38*1e651e1eSRoland Levillain * 7 -- exp underflow 39*1e651e1eSRoland Levillain * 8 -- ieee_y0(0) 40*1e651e1eSRoland Levillain * 9 -- ieee_y0(-ve) 41*1e651e1eSRoland Levillain * 10-- ieee_y1(0) 42*1e651e1eSRoland Levillain * 11-- ieee_y1(-ve) 43*1e651e1eSRoland Levillain * 12-- ieee_yn(0) 44*1e651e1eSRoland Levillain * 13-- ieee_yn(-ve) 45*1e651e1eSRoland Levillain * 14-- ieee_lgamma(finite) overflow 46*1e651e1eSRoland Levillain * 15-- ieee_lgamma(-integer) 47*1e651e1eSRoland Levillain * 16-- ieee_log(0) 48*1e651e1eSRoland Levillain * 17-- ieee_log(x<0) 49*1e651e1eSRoland Levillain * 18-- ieee_log10(0) 50*1e651e1eSRoland Levillain * 19-- ieee_log10(x<0) 51*1e651e1eSRoland Levillain * 20-- ieee_pow(0.0,0.0) 52*1e651e1eSRoland Levillain * 21-- ieee_pow(x,y) overflow 53*1e651e1eSRoland Levillain * 22-- ieee_pow(x,y) underflow 54*1e651e1eSRoland Levillain * 23-- ieee_pow(0,negative) 55*1e651e1eSRoland Levillain * 24-- ieee_pow(neg,non-integral) 56*1e651e1eSRoland Levillain * 25-- ieee_sinh(finite) overflow 57*1e651e1eSRoland Levillain * 26-- ieee_sqrt(negative) 58*1e651e1eSRoland Levillain * 27-- ieee_fmod(x,0) 59*1e651e1eSRoland Levillain * 28-- ieee_remainder(x,0) 60*1e651e1eSRoland Levillain * 29-- acosh(x<1) 61*1e651e1eSRoland Levillain * 30-- atanh(|x|>1) 62*1e651e1eSRoland Levillain * 31-- atanh(|x|=1) 63*1e651e1eSRoland Levillain * 32-- scalb overflow 64*1e651e1eSRoland Levillain * 33-- scalb underflow 65*1e651e1eSRoland Levillain * 34-- ieee_j0(|x|>X_TLOSS) 66*1e651e1eSRoland Levillain * 35-- ieee_y0(x>X_TLOSS) 67*1e651e1eSRoland Levillain * 36-- ieee_j1(|x|>X_TLOSS) 68*1e651e1eSRoland Levillain * 37-- ieee_y1(x>X_TLOSS) 69*1e651e1eSRoland Levillain * 38-- ieee_jn(|x|>X_TLOSS, n) 70*1e651e1eSRoland Levillain * 39-- ieee_yn(x>X_TLOSS, n) 71*1e651e1eSRoland Levillain * 40-- ieee_gamma(finite) overflow 72*1e651e1eSRoland Levillain * 41-- ieee_gamma(-integer) 73*1e651e1eSRoland Levillain * 42-- ieee_pow(NaN,0.0) 74*1e651e1eSRoland Levillain */ 75*1e651e1eSRoland Levillain 76*1e651e1eSRoland Levillain 77*1e651e1eSRoland Levillain #ifdef __STDC__ __kernel_standard(double x,double y,int type)78*1e651e1eSRoland Levillain double __kernel_standard(double x, double y, int type) 79*1e651e1eSRoland Levillain #else 80*1e651e1eSRoland Levillain double __kernel_standard(x,y,type) 81*1e651e1eSRoland Levillain double x,y; int type; 82*1e651e1eSRoland Levillain #endif 83*1e651e1eSRoland Levillain { 84*1e651e1eSRoland Levillain struct exception exc; 85*1e651e1eSRoland Levillain #ifndef HUGE_VAL /* this is the only routine that uses HUGE_VAL */ 86*1e651e1eSRoland Levillain #define HUGE_VAL inf 87*1e651e1eSRoland Levillain double inf = 0.0; 88*1e651e1eSRoland Levillain 89*1e651e1eSRoland Levillain __HI(inf) = 0x7ff00000; /* set inf to infinite */ 90*1e651e1eSRoland Levillain #endif 91*1e651e1eSRoland Levillain 92*1e651e1eSRoland Levillain #ifdef _USE_WRITE 93*1e651e1eSRoland Levillain (void) fflush(stdout); 94*1e651e1eSRoland Levillain #endif 95*1e651e1eSRoland Levillain exc.arg1 = x; 96*1e651e1eSRoland Levillain exc.arg2 = y; 97*1e651e1eSRoland Levillain switch(type) { 98*1e651e1eSRoland Levillain case 1: 99*1e651e1eSRoland Levillain /* ieee_acos(|x|>1) */ 100*1e651e1eSRoland Levillain exc.type = DOMAIN; 101*1e651e1eSRoland Levillain exc.name = "acos"; 102*1e651e1eSRoland Levillain exc.retval = zero; 103*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 104*1e651e1eSRoland Levillain errno = EDOM; 105*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 106*1e651e1eSRoland Levillain if(_LIB_VERSION == _SVID_) { 107*1e651e1eSRoland Levillain (void) WRITE2("acos: DOMAIN error\n", 19); 108*1e651e1eSRoland Levillain } 109*1e651e1eSRoland Levillain errno = EDOM; 110*1e651e1eSRoland Levillain } 111*1e651e1eSRoland Levillain break; 112*1e651e1eSRoland Levillain case 2: 113*1e651e1eSRoland Levillain /* ieee_asin(|x|>1) */ 114*1e651e1eSRoland Levillain exc.type = DOMAIN; 115*1e651e1eSRoland Levillain exc.name = "asin"; 116*1e651e1eSRoland Levillain exc.retval = zero; 117*1e651e1eSRoland Levillain if(_LIB_VERSION == _POSIX_) 118*1e651e1eSRoland Levillain errno = EDOM; 119*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 120*1e651e1eSRoland Levillain if(_LIB_VERSION == _SVID_) { 121*1e651e1eSRoland Levillain (void) WRITE2("asin: DOMAIN error\n", 19); 122*1e651e1eSRoland Levillain } 123*1e651e1eSRoland Levillain errno = EDOM; 124*1e651e1eSRoland Levillain } 125*1e651e1eSRoland Levillain break; 126*1e651e1eSRoland Levillain case 3: 127*1e651e1eSRoland Levillain /* ieee_atan2(+-0,+-0) */ 128*1e651e1eSRoland Levillain exc.arg1 = y; 129*1e651e1eSRoland Levillain exc.arg2 = x; 130*1e651e1eSRoland Levillain exc.type = DOMAIN; 131*1e651e1eSRoland Levillain exc.name = "atan2"; 132*1e651e1eSRoland Levillain exc.retval = zero; 133*1e651e1eSRoland Levillain if(_LIB_VERSION == _POSIX_) 134*1e651e1eSRoland Levillain errno = EDOM; 135*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 136*1e651e1eSRoland Levillain if(_LIB_VERSION == _SVID_) { 137*1e651e1eSRoland Levillain (void) WRITE2("atan2: DOMAIN error\n", 20); 138*1e651e1eSRoland Levillain } 139*1e651e1eSRoland Levillain errno = EDOM; 140*1e651e1eSRoland Levillain } 141*1e651e1eSRoland Levillain break; 142*1e651e1eSRoland Levillain case 4: 143*1e651e1eSRoland Levillain /* ieee_hypot(finite,finite) overflow */ 144*1e651e1eSRoland Levillain exc.type = OVERFLOW; 145*1e651e1eSRoland Levillain exc.name = "hypot"; 146*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 147*1e651e1eSRoland Levillain exc.retval = HUGE; 148*1e651e1eSRoland Levillain else 149*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 150*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 151*1e651e1eSRoland Levillain errno = ERANGE; 152*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 153*1e651e1eSRoland Levillain errno = ERANGE; 154*1e651e1eSRoland Levillain } 155*1e651e1eSRoland Levillain break; 156*1e651e1eSRoland Levillain case 5: 157*1e651e1eSRoland Levillain /* ieee_cosh(finite) overflow */ 158*1e651e1eSRoland Levillain exc.type = OVERFLOW; 159*1e651e1eSRoland Levillain exc.name = "cosh"; 160*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 161*1e651e1eSRoland Levillain exc.retval = HUGE; 162*1e651e1eSRoland Levillain else 163*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 164*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 165*1e651e1eSRoland Levillain errno = ERANGE; 166*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 167*1e651e1eSRoland Levillain errno = ERANGE; 168*1e651e1eSRoland Levillain } 169*1e651e1eSRoland Levillain break; 170*1e651e1eSRoland Levillain case 6: 171*1e651e1eSRoland Levillain /* ieee_exp(finite) overflow */ 172*1e651e1eSRoland Levillain exc.type = OVERFLOW; 173*1e651e1eSRoland Levillain exc.name = "exp"; 174*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 175*1e651e1eSRoland Levillain exc.retval = HUGE; 176*1e651e1eSRoland Levillain else 177*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 178*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 179*1e651e1eSRoland Levillain errno = ERANGE; 180*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 181*1e651e1eSRoland Levillain errno = ERANGE; 182*1e651e1eSRoland Levillain } 183*1e651e1eSRoland Levillain break; 184*1e651e1eSRoland Levillain case 7: 185*1e651e1eSRoland Levillain /* ieee_exp(finite) underflow */ 186*1e651e1eSRoland Levillain exc.type = UNDERFLOW; 187*1e651e1eSRoland Levillain exc.name = "exp"; 188*1e651e1eSRoland Levillain exc.retval = zero; 189*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 190*1e651e1eSRoland Levillain errno = ERANGE; 191*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 192*1e651e1eSRoland Levillain errno = ERANGE; 193*1e651e1eSRoland Levillain } 194*1e651e1eSRoland Levillain break; 195*1e651e1eSRoland Levillain case 8: 196*1e651e1eSRoland Levillain /* ieee_y0(0) = -inf */ 197*1e651e1eSRoland Levillain exc.type = DOMAIN; /* should be SING for IEEE */ 198*1e651e1eSRoland Levillain exc.name = "y0"; 199*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 200*1e651e1eSRoland Levillain exc.retval = -HUGE; 201*1e651e1eSRoland Levillain else 202*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 203*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 204*1e651e1eSRoland Levillain errno = EDOM; 205*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 206*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 207*1e651e1eSRoland Levillain (void) WRITE2("y0: DOMAIN error\n", 17); 208*1e651e1eSRoland Levillain } 209*1e651e1eSRoland Levillain errno = EDOM; 210*1e651e1eSRoland Levillain } 211*1e651e1eSRoland Levillain break; 212*1e651e1eSRoland Levillain case 9: 213*1e651e1eSRoland Levillain /* ieee_y0(x<0) = NaN */ 214*1e651e1eSRoland Levillain exc.type = DOMAIN; 215*1e651e1eSRoland Levillain exc.name = "y0"; 216*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 217*1e651e1eSRoland Levillain exc.retval = -HUGE; 218*1e651e1eSRoland Levillain else 219*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 220*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 221*1e651e1eSRoland Levillain errno = EDOM; 222*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 223*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 224*1e651e1eSRoland Levillain (void) WRITE2("y0: DOMAIN error\n", 17); 225*1e651e1eSRoland Levillain } 226*1e651e1eSRoland Levillain errno = EDOM; 227*1e651e1eSRoland Levillain } 228*1e651e1eSRoland Levillain break; 229*1e651e1eSRoland Levillain case 10: 230*1e651e1eSRoland Levillain /* ieee_y1(0) = -inf */ 231*1e651e1eSRoland Levillain exc.type = DOMAIN; /* should be SING for IEEE */ 232*1e651e1eSRoland Levillain exc.name = "y1"; 233*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 234*1e651e1eSRoland Levillain exc.retval = -HUGE; 235*1e651e1eSRoland Levillain else 236*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 237*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 238*1e651e1eSRoland Levillain errno = EDOM; 239*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 240*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 241*1e651e1eSRoland Levillain (void) WRITE2("y1: DOMAIN error\n", 17); 242*1e651e1eSRoland Levillain } 243*1e651e1eSRoland Levillain errno = EDOM; 244*1e651e1eSRoland Levillain } 245*1e651e1eSRoland Levillain break; 246*1e651e1eSRoland Levillain case 11: 247*1e651e1eSRoland Levillain /* ieee_y1(x<0) = NaN */ 248*1e651e1eSRoland Levillain exc.type = DOMAIN; 249*1e651e1eSRoland Levillain exc.name = "y1"; 250*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 251*1e651e1eSRoland Levillain exc.retval = -HUGE; 252*1e651e1eSRoland Levillain else 253*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 254*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 255*1e651e1eSRoland Levillain errno = EDOM; 256*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 257*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 258*1e651e1eSRoland Levillain (void) WRITE2("y1: DOMAIN error\n", 17); 259*1e651e1eSRoland Levillain } 260*1e651e1eSRoland Levillain errno = EDOM; 261*1e651e1eSRoland Levillain } 262*1e651e1eSRoland Levillain break; 263*1e651e1eSRoland Levillain case 12: 264*1e651e1eSRoland Levillain /* ieee_yn(n,0) = -inf */ 265*1e651e1eSRoland Levillain exc.type = DOMAIN; /* should be SING for IEEE */ 266*1e651e1eSRoland Levillain exc.name = "yn"; 267*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 268*1e651e1eSRoland Levillain exc.retval = -HUGE; 269*1e651e1eSRoland Levillain else 270*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 271*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 272*1e651e1eSRoland Levillain errno = EDOM; 273*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 274*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 275*1e651e1eSRoland Levillain (void) WRITE2("yn: DOMAIN error\n", 17); 276*1e651e1eSRoland Levillain } 277*1e651e1eSRoland Levillain errno = EDOM; 278*1e651e1eSRoland Levillain } 279*1e651e1eSRoland Levillain break; 280*1e651e1eSRoland Levillain case 13: 281*1e651e1eSRoland Levillain /* ieee_yn(x<0) = NaN */ 282*1e651e1eSRoland Levillain exc.type = DOMAIN; 283*1e651e1eSRoland Levillain exc.name = "yn"; 284*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 285*1e651e1eSRoland Levillain exc.retval = -HUGE; 286*1e651e1eSRoland Levillain else 287*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 288*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 289*1e651e1eSRoland Levillain errno = EDOM; 290*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 291*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 292*1e651e1eSRoland Levillain (void) WRITE2("yn: DOMAIN error\n", 17); 293*1e651e1eSRoland Levillain } 294*1e651e1eSRoland Levillain errno = EDOM; 295*1e651e1eSRoland Levillain } 296*1e651e1eSRoland Levillain break; 297*1e651e1eSRoland Levillain case 14: 298*1e651e1eSRoland Levillain /* ieee_lgamma(finite) overflow */ 299*1e651e1eSRoland Levillain exc.type = OVERFLOW; 300*1e651e1eSRoland Levillain exc.name = "lgamma"; 301*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 302*1e651e1eSRoland Levillain exc.retval = HUGE; 303*1e651e1eSRoland Levillain else 304*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 305*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 306*1e651e1eSRoland Levillain errno = ERANGE; 307*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 308*1e651e1eSRoland Levillain errno = ERANGE; 309*1e651e1eSRoland Levillain } 310*1e651e1eSRoland Levillain break; 311*1e651e1eSRoland Levillain case 15: 312*1e651e1eSRoland Levillain /* ieee_lgamma(-integer) or ieee_lgamma(0) */ 313*1e651e1eSRoland Levillain exc.type = SING; 314*1e651e1eSRoland Levillain exc.name = "lgamma"; 315*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 316*1e651e1eSRoland Levillain exc.retval = HUGE; 317*1e651e1eSRoland Levillain else 318*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 319*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 320*1e651e1eSRoland Levillain errno = EDOM; 321*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 322*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 323*1e651e1eSRoland Levillain (void) WRITE2("lgamma: SING error\n", 19); 324*1e651e1eSRoland Levillain } 325*1e651e1eSRoland Levillain errno = EDOM; 326*1e651e1eSRoland Levillain } 327*1e651e1eSRoland Levillain break; 328*1e651e1eSRoland Levillain case 16: 329*1e651e1eSRoland Levillain /* ieee_log(0) */ 330*1e651e1eSRoland Levillain exc.type = SING; 331*1e651e1eSRoland Levillain exc.name = "log"; 332*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 333*1e651e1eSRoland Levillain exc.retval = -HUGE; 334*1e651e1eSRoland Levillain else 335*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 336*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 337*1e651e1eSRoland Levillain errno = ERANGE; 338*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 339*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 340*1e651e1eSRoland Levillain (void) WRITE2("log: SING error\n", 16); 341*1e651e1eSRoland Levillain } 342*1e651e1eSRoland Levillain errno = EDOM; 343*1e651e1eSRoland Levillain } 344*1e651e1eSRoland Levillain break; 345*1e651e1eSRoland Levillain case 17: 346*1e651e1eSRoland Levillain /* ieee_log(x<0) */ 347*1e651e1eSRoland Levillain exc.type = DOMAIN; 348*1e651e1eSRoland Levillain exc.name = "log"; 349*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 350*1e651e1eSRoland Levillain exc.retval = -HUGE; 351*1e651e1eSRoland Levillain else 352*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 353*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 354*1e651e1eSRoland Levillain errno = EDOM; 355*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 356*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 357*1e651e1eSRoland Levillain (void) WRITE2("log: DOMAIN error\n", 18); 358*1e651e1eSRoland Levillain } 359*1e651e1eSRoland Levillain errno = EDOM; 360*1e651e1eSRoland Levillain } 361*1e651e1eSRoland Levillain break; 362*1e651e1eSRoland Levillain case 18: 363*1e651e1eSRoland Levillain /* ieee_log10(0) */ 364*1e651e1eSRoland Levillain exc.type = SING; 365*1e651e1eSRoland Levillain exc.name = "log10"; 366*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 367*1e651e1eSRoland Levillain exc.retval = -HUGE; 368*1e651e1eSRoland Levillain else 369*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 370*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 371*1e651e1eSRoland Levillain errno = ERANGE; 372*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 373*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 374*1e651e1eSRoland Levillain (void) WRITE2("log10: SING error\n", 18); 375*1e651e1eSRoland Levillain } 376*1e651e1eSRoland Levillain errno = EDOM; 377*1e651e1eSRoland Levillain } 378*1e651e1eSRoland Levillain break; 379*1e651e1eSRoland Levillain case 19: 380*1e651e1eSRoland Levillain /* ieee_log10(x<0) */ 381*1e651e1eSRoland Levillain exc.type = DOMAIN; 382*1e651e1eSRoland Levillain exc.name = "log10"; 383*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 384*1e651e1eSRoland Levillain exc.retval = -HUGE; 385*1e651e1eSRoland Levillain else 386*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 387*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 388*1e651e1eSRoland Levillain errno = EDOM; 389*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 390*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 391*1e651e1eSRoland Levillain (void) WRITE2("log10: DOMAIN error\n", 20); 392*1e651e1eSRoland Levillain } 393*1e651e1eSRoland Levillain errno = EDOM; 394*1e651e1eSRoland Levillain } 395*1e651e1eSRoland Levillain break; 396*1e651e1eSRoland Levillain case 20: 397*1e651e1eSRoland Levillain /* ieee_pow(0.0,0.0) */ 398*1e651e1eSRoland Levillain /* error only if _LIB_VERSION == _SVID_ */ 399*1e651e1eSRoland Levillain exc.type = DOMAIN; 400*1e651e1eSRoland Levillain exc.name = "pow"; 401*1e651e1eSRoland Levillain exc.retval = zero; 402*1e651e1eSRoland Levillain if (_LIB_VERSION != _SVID_) exc.retval = 1.0; 403*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 404*1e651e1eSRoland Levillain (void) WRITE2("pow(0,0): DOMAIN error\n", 23); 405*1e651e1eSRoland Levillain errno = EDOM; 406*1e651e1eSRoland Levillain } 407*1e651e1eSRoland Levillain break; 408*1e651e1eSRoland Levillain case 21: 409*1e651e1eSRoland Levillain /* ieee_pow(x,y) overflow */ 410*1e651e1eSRoland Levillain exc.type = OVERFLOW; 411*1e651e1eSRoland Levillain exc.name = "pow"; 412*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 413*1e651e1eSRoland Levillain exc.retval = HUGE; 414*1e651e1eSRoland Levillain y *= 0.5; 415*1e651e1eSRoland Levillain if(x<zero&&ieee_rint(y)!=y) exc.retval = -HUGE; 416*1e651e1eSRoland Levillain } else { 417*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 418*1e651e1eSRoland Levillain y *= 0.5; 419*1e651e1eSRoland Levillain if(x<zero&&ieee_rint(y)!=y) exc.retval = -HUGE_VAL; 420*1e651e1eSRoland Levillain } 421*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 422*1e651e1eSRoland Levillain errno = ERANGE; 423*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 424*1e651e1eSRoland Levillain errno = ERANGE; 425*1e651e1eSRoland Levillain } 426*1e651e1eSRoland Levillain break; 427*1e651e1eSRoland Levillain case 22: 428*1e651e1eSRoland Levillain /* ieee_pow(x,y) underflow */ 429*1e651e1eSRoland Levillain exc.type = UNDERFLOW; 430*1e651e1eSRoland Levillain exc.name = "pow"; 431*1e651e1eSRoland Levillain exc.retval = zero; 432*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 433*1e651e1eSRoland Levillain errno = ERANGE; 434*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 435*1e651e1eSRoland Levillain errno = ERANGE; 436*1e651e1eSRoland Levillain } 437*1e651e1eSRoland Levillain break; 438*1e651e1eSRoland Levillain case 23: 439*1e651e1eSRoland Levillain /* 0**neg */ 440*1e651e1eSRoland Levillain exc.type = DOMAIN; 441*1e651e1eSRoland Levillain exc.name = "pow"; 442*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 443*1e651e1eSRoland Levillain exc.retval = zero; 444*1e651e1eSRoland Levillain else 445*1e651e1eSRoland Levillain exc.retval = -HUGE_VAL; 446*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 447*1e651e1eSRoland Levillain errno = EDOM; 448*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 449*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 450*1e651e1eSRoland Levillain (void) WRITE2("pow(0,neg): DOMAIN error\n", 25); 451*1e651e1eSRoland Levillain } 452*1e651e1eSRoland Levillain errno = EDOM; 453*1e651e1eSRoland Levillain } 454*1e651e1eSRoland Levillain break; 455*1e651e1eSRoland Levillain case 24: 456*1e651e1eSRoland Levillain /* neg**non-integral */ 457*1e651e1eSRoland Levillain exc.type = DOMAIN; 458*1e651e1eSRoland Levillain exc.name = "pow"; 459*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 460*1e651e1eSRoland Levillain exc.retval = zero; 461*1e651e1eSRoland Levillain else 462*1e651e1eSRoland Levillain exc.retval = zero/zero; /* X/Open allow NaN */ 463*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 464*1e651e1eSRoland Levillain errno = EDOM; 465*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 466*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 467*1e651e1eSRoland Levillain (void) WRITE2("neg**non-integral: DOMAIN error\n", 32); 468*1e651e1eSRoland Levillain } 469*1e651e1eSRoland Levillain errno = EDOM; 470*1e651e1eSRoland Levillain } 471*1e651e1eSRoland Levillain break; 472*1e651e1eSRoland Levillain case 25: 473*1e651e1eSRoland Levillain /* ieee_sinh(finite) overflow */ 474*1e651e1eSRoland Levillain exc.type = OVERFLOW; 475*1e651e1eSRoland Levillain exc.name = "sinh"; 476*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 477*1e651e1eSRoland Levillain exc.retval = ( (x>zero) ? HUGE : -HUGE); 478*1e651e1eSRoland Levillain else 479*1e651e1eSRoland Levillain exc.retval = ( (x>zero) ? HUGE_VAL : -HUGE_VAL); 480*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 481*1e651e1eSRoland Levillain errno = ERANGE; 482*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 483*1e651e1eSRoland Levillain errno = ERANGE; 484*1e651e1eSRoland Levillain } 485*1e651e1eSRoland Levillain break; 486*1e651e1eSRoland Levillain case 26: 487*1e651e1eSRoland Levillain /* ieee_sqrt(x<0) */ 488*1e651e1eSRoland Levillain exc.type = DOMAIN; 489*1e651e1eSRoland Levillain exc.name = "sqrt"; 490*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 491*1e651e1eSRoland Levillain exc.retval = zero; 492*1e651e1eSRoland Levillain else 493*1e651e1eSRoland Levillain exc.retval = zero/zero; 494*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 495*1e651e1eSRoland Levillain errno = EDOM; 496*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 497*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 498*1e651e1eSRoland Levillain (void) WRITE2("sqrt: DOMAIN error\n", 19); 499*1e651e1eSRoland Levillain } 500*1e651e1eSRoland Levillain errno = EDOM; 501*1e651e1eSRoland Levillain } 502*1e651e1eSRoland Levillain break; 503*1e651e1eSRoland Levillain case 27: 504*1e651e1eSRoland Levillain /* ieee_fmod(x,0) */ 505*1e651e1eSRoland Levillain exc.type = DOMAIN; 506*1e651e1eSRoland Levillain exc.name = "fmod"; 507*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 508*1e651e1eSRoland Levillain exc.retval = x; 509*1e651e1eSRoland Levillain else 510*1e651e1eSRoland Levillain exc.retval = zero/zero; 511*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 512*1e651e1eSRoland Levillain errno = EDOM; 513*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 514*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 515*1e651e1eSRoland Levillain (void) WRITE2("fmod: DOMAIN error\n", 20); 516*1e651e1eSRoland Levillain } 517*1e651e1eSRoland Levillain errno = EDOM; 518*1e651e1eSRoland Levillain } 519*1e651e1eSRoland Levillain break; 520*1e651e1eSRoland Levillain case 28: 521*1e651e1eSRoland Levillain /* ieee_remainder(x,0) */ 522*1e651e1eSRoland Levillain exc.type = DOMAIN; 523*1e651e1eSRoland Levillain exc.name = "remainder"; 524*1e651e1eSRoland Levillain exc.retval = zero/zero; 525*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 526*1e651e1eSRoland Levillain errno = EDOM; 527*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 528*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 529*1e651e1eSRoland Levillain (void) WRITE2("remainder: DOMAIN error\n", 24); 530*1e651e1eSRoland Levillain } 531*1e651e1eSRoland Levillain errno = EDOM; 532*1e651e1eSRoland Levillain } 533*1e651e1eSRoland Levillain break; 534*1e651e1eSRoland Levillain case 29: 535*1e651e1eSRoland Levillain /* acosh(x<1) */ 536*1e651e1eSRoland Levillain exc.type = DOMAIN; 537*1e651e1eSRoland Levillain exc.name = "acosh"; 538*1e651e1eSRoland Levillain exc.retval = zero/zero; 539*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 540*1e651e1eSRoland Levillain errno = EDOM; 541*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 542*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 543*1e651e1eSRoland Levillain (void) WRITE2("acosh: DOMAIN error\n", 20); 544*1e651e1eSRoland Levillain } 545*1e651e1eSRoland Levillain errno = EDOM; 546*1e651e1eSRoland Levillain } 547*1e651e1eSRoland Levillain break; 548*1e651e1eSRoland Levillain case 30: 549*1e651e1eSRoland Levillain /* atanh(|x|>1) */ 550*1e651e1eSRoland Levillain exc.type = DOMAIN; 551*1e651e1eSRoland Levillain exc.name = "atanh"; 552*1e651e1eSRoland Levillain exc.retval = zero/zero; 553*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 554*1e651e1eSRoland Levillain errno = EDOM; 555*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 556*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 557*1e651e1eSRoland Levillain (void) WRITE2("atanh: DOMAIN error\n", 20); 558*1e651e1eSRoland Levillain } 559*1e651e1eSRoland Levillain errno = EDOM; 560*1e651e1eSRoland Levillain } 561*1e651e1eSRoland Levillain break; 562*1e651e1eSRoland Levillain case 31: 563*1e651e1eSRoland Levillain /* atanh(|x|=1) */ 564*1e651e1eSRoland Levillain exc.type = SING; 565*1e651e1eSRoland Levillain exc.name = "atanh"; 566*1e651e1eSRoland Levillain exc.retval = x/zero; /* sign(x)*inf */ 567*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 568*1e651e1eSRoland Levillain errno = EDOM; 569*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 570*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 571*1e651e1eSRoland Levillain (void) WRITE2("atanh: SING error\n", 18); 572*1e651e1eSRoland Levillain } 573*1e651e1eSRoland Levillain errno = EDOM; 574*1e651e1eSRoland Levillain } 575*1e651e1eSRoland Levillain break; 576*1e651e1eSRoland Levillain case 32: 577*1e651e1eSRoland Levillain /* scalb overflow; SVID also returns +-HUGE_VAL */ 578*1e651e1eSRoland Levillain exc.type = OVERFLOW; 579*1e651e1eSRoland Levillain exc.name = "scalb"; 580*1e651e1eSRoland Levillain exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL; 581*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 582*1e651e1eSRoland Levillain errno = ERANGE; 583*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 584*1e651e1eSRoland Levillain errno = ERANGE; 585*1e651e1eSRoland Levillain } 586*1e651e1eSRoland Levillain break; 587*1e651e1eSRoland Levillain case 33: 588*1e651e1eSRoland Levillain /* scalb underflow */ 589*1e651e1eSRoland Levillain exc.type = UNDERFLOW; 590*1e651e1eSRoland Levillain exc.name = "scalb"; 591*1e651e1eSRoland Levillain exc.retval = ieee_copysign(zero,x); 592*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 593*1e651e1eSRoland Levillain errno = ERANGE; 594*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 595*1e651e1eSRoland Levillain errno = ERANGE; 596*1e651e1eSRoland Levillain } 597*1e651e1eSRoland Levillain break; 598*1e651e1eSRoland Levillain case 34: 599*1e651e1eSRoland Levillain /* ieee_j0(|x|>X_TLOSS) */ 600*1e651e1eSRoland Levillain exc.type = TLOSS; 601*1e651e1eSRoland Levillain exc.name = "j0"; 602*1e651e1eSRoland Levillain exc.retval = zero; 603*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 604*1e651e1eSRoland Levillain errno = ERANGE; 605*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 606*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 607*1e651e1eSRoland Levillain (void) WRITE2(exc.name, 2); 608*1e651e1eSRoland Levillain (void) WRITE2(": TLOSS error\n", 14); 609*1e651e1eSRoland Levillain } 610*1e651e1eSRoland Levillain errno = ERANGE; 611*1e651e1eSRoland Levillain } 612*1e651e1eSRoland Levillain break; 613*1e651e1eSRoland Levillain case 35: 614*1e651e1eSRoland Levillain /* ieee_y0(x>X_TLOSS) */ 615*1e651e1eSRoland Levillain exc.type = TLOSS; 616*1e651e1eSRoland Levillain exc.name = "y0"; 617*1e651e1eSRoland Levillain exc.retval = zero; 618*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 619*1e651e1eSRoland Levillain errno = ERANGE; 620*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 621*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 622*1e651e1eSRoland Levillain (void) WRITE2(exc.name, 2); 623*1e651e1eSRoland Levillain (void) WRITE2(": TLOSS error\n", 14); 624*1e651e1eSRoland Levillain } 625*1e651e1eSRoland Levillain errno = ERANGE; 626*1e651e1eSRoland Levillain } 627*1e651e1eSRoland Levillain break; 628*1e651e1eSRoland Levillain case 36: 629*1e651e1eSRoland Levillain /* ieee_j1(|x|>X_TLOSS) */ 630*1e651e1eSRoland Levillain exc.type = TLOSS; 631*1e651e1eSRoland Levillain exc.name = "j1"; 632*1e651e1eSRoland Levillain exc.retval = zero; 633*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 634*1e651e1eSRoland Levillain errno = ERANGE; 635*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 636*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 637*1e651e1eSRoland Levillain (void) WRITE2(exc.name, 2); 638*1e651e1eSRoland Levillain (void) WRITE2(": TLOSS error\n", 14); 639*1e651e1eSRoland Levillain } 640*1e651e1eSRoland Levillain errno = ERANGE; 641*1e651e1eSRoland Levillain } 642*1e651e1eSRoland Levillain break; 643*1e651e1eSRoland Levillain case 37: 644*1e651e1eSRoland Levillain /* ieee_y1(x>X_TLOSS) */ 645*1e651e1eSRoland Levillain exc.type = TLOSS; 646*1e651e1eSRoland Levillain exc.name = "y1"; 647*1e651e1eSRoland Levillain exc.retval = zero; 648*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 649*1e651e1eSRoland Levillain errno = ERANGE; 650*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 651*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 652*1e651e1eSRoland Levillain (void) WRITE2(exc.name, 2); 653*1e651e1eSRoland Levillain (void) WRITE2(": TLOSS error\n", 14); 654*1e651e1eSRoland Levillain } 655*1e651e1eSRoland Levillain errno = ERANGE; 656*1e651e1eSRoland Levillain } 657*1e651e1eSRoland Levillain break; 658*1e651e1eSRoland Levillain case 38: 659*1e651e1eSRoland Levillain /* ieee_jn(|x|>X_TLOSS) */ 660*1e651e1eSRoland Levillain exc.type = TLOSS; 661*1e651e1eSRoland Levillain exc.name = "jn"; 662*1e651e1eSRoland Levillain exc.retval = zero; 663*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 664*1e651e1eSRoland Levillain errno = ERANGE; 665*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 666*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 667*1e651e1eSRoland Levillain (void) WRITE2(exc.name, 2); 668*1e651e1eSRoland Levillain (void) WRITE2(": TLOSS error\n", 14); 669*1e651e1eSRoland Levillain } 670*1e651e1eSRoland Levillain errno = ERANGE; 671*1e651e1eSRoland Levillain } 672*1e651e1eSRoland Levillain break; 673*1e651e1eSRoland Levillain case 39: 674*1e651e1eSRoland Levillain /* ieee_yn(x>X_TLOSS) */ 675*1e651e1eSRoland Levillain exc.type = TLOSS; 676*1e651e1eSRoland Levillain exc.name = "yn"; 677*1e651e1eSRoland Levillain exc.retval = zero; 678*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 679*1e651e1eSRoland Levillain errno = ERANGE; 680*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 681*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 682*1e651e1eSRoland Levillain (void) WRITE2(exc.name, 2); 683*1e651e1eSRoland Levillain (void) WRITE2(": TLOSS error\n", 14); 684*1e651e1eSRoland Levillain } 685*1e651e1eSRoland Levillain errno = ERANGE; 686*1e651e1eSRoland Levillain } 687*1e651e1eSRoland Levillain break; 688*1e651e1eSRoland Levillain case 40: 689*1e651e1eSRoland Levillain /* ieee_gamma(finite) overflow */ 690*1e651e1eSRoland Levillain exc.type = OVERFLOW; 691*1e651e1eSRoland Levillain exc.name = "gamma"; 692*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 693*1e651e1eSRoland Levillain exc.retval = HUGE; 694*1e651e1eSRoland Levillain else 695*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 696*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 697*1e651e1eSRoland Levillain errno = ERANGE; 698*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 699*1e651e1eSRoland Levillain errno = ERANGE; 700*1e651e1eSRoland Levillain } 701*1e651e1eSRoland Levillain break; 702*1e651e1eSRoland Levillain case 41: 703*1e651e1eSRoland Levillain /* ieee_gamma(-integer) or ieee_gamma(0) */ 704*1e651e1eSRoland Levillain exc.type = SING; 705*1e651e1eSRoland Levillain exc.name = "gamma"; 706*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) 707*1e651e1eSRoland Levillain exc.retval = HUGE; 708*1e651e1eSRoland Levillain else 709*1e651e1eSRoland Levillain exc.retval = HUGE_VAL; 710*1e651e1eSRoland Levillain if (_LIB_VERSION == _POSIX_) 711*1e651e1eSRoland Levillain errno = EDOM; 712*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 713*1e651e1eSRoland Levillain if (_LIB_VERSION == _SVID_) { 714*1e651e1eSRoland Levillain (void) WRITE2("gamma: SING error\n", 18); 715*1e651e1eSRoland Levillain } 716*1e651e1eSRoland Levillain errno = EDOM; 717*1e651e1eSRoland Levillain } 718*1e651e1eSRoland Levillain break; 719*1e651e1eSRoland Levillain case 42: 720*1e651e1eSRoland Levillain /* ieee_pow(NaN,0.0) */ 721*1e651e1eSRoland Levillain /* error only if _LIB_VERSION == _SVID_ & _XOPEN_ */ 722*1e651e1eSRoland Levillain exc.type = DOMAIN; 723*1e651e1eSRoland Levillain exc.name = "pow"; 724*1e651e1eSRoland Levillain exc.retval = x; 725*1e651e1eSRoland Levillain if (_LIB_VERSION == _IEEE_ || 726*1e651e1eSRoland Levillain _LIB_VERSION == _POSIX_) exc.retval = 1.0; 727*1e651e1eSRoland Levillain else if (!ieee_matherr(&exc)) { 728*1e651e1eSRoland Levillain errno = EDOM; 729*1e651e1eSRoland Levillain } 730*1e651e1eSRoland Levillain break; 731*1e651e1eSRoland Levillain } 732*1e651e1eSRoland Levillain return exc.retval; 733*1e651e1eSRoland Levillain } 734