231 return (sby == 0 ? y : zero); 232 else /* (|x|<1)**-,+inf = inf,0 */ 233 return (sby != 0 ? -y : zero); 234 } 235 if (ahy == 0x3ff00000) { /* y is +-1 */ 236 if (sby != 0) { /* y is -1 */ 237 if (x == zero) /* divided by zero */ 238 return (_SVID_libm_err(x, y, 23)); 239 else if (ahx < 0x40000 || ((ahx - 0x40000) | 240 lx) == 0) /* overflow */ 241 return (_SVID_libm_err(x, y, 21)); 242 else 243 return (one / x); 244 } else 245 return (x); 246 } 247 if (hy == 0x40000000) { /* y is 2 */ 248 if (ahx >= 0x5ff00000 && ahx < 0x7ff00000) 249 return (_SVID_libm_err(x, y, 21)); 250 /* x*x overflow */ 251 else if (ahx < 0x1e56a09e && (ahx | lx) != 0 || 252 ahx == 0x1e56a09e && lx < 0x667f3bcd) 253 return (_SVID_libm_err(x, y, 22)); 254 /* x*x underflow */ 255 else 256 return (x * x); 257 } 258 if (hy == 0x3fe00000) { 259 if (!((ahx | lx) == 0 || ((ahx - 0x7ff00000) | lx) == 260 0 || sbx == 1)) 261 return (sqrt(x)); /* y is 0.5 and x > 0 */ 262 } 263 } 264 /* special value of x */ 265 if (lx == 0) { 266 if (ahx == 0x7ff00000 || ahx == 0 || ahx == 0x3ff00000) { 267 /* x is +-0,+-inf,-1 */ 268 z = ax; 269 if (sby == 1) { 270 z = one / z; /* z = |x|**y */ 271 if (ahx == 0) 272 return (_SVID_libm_err(x, y, 23)); | 231 return (sby == 0 ? y : zero); 232 else /* (|x|<1)**-,+inf = inf,0 */ 233 return (sby != 0 ? -y : zero); 234 } 235 if (ahy == 0x3ff00000) { /* y is +-1 */ 236 if (sby != 0) { /* y is -1 */ 237 if (x == zero) /* divided by zero */ 238 return (_SVID_libm_err(x, y, 23)); 239 else if (ahx < 0x40000 || ((ahx - 0x40000) | 240 lx) == 0) /* overflow */ 241 return (_SVID_libm_err(x, y, 21)); 242 else 243 return (one / x); 244 } else 245 return (x); 246 } 247 if (hy == 0x40000000) { /* y is 2 */ 248 if (ahx >= 0x5ff00000 && ahx < 0x7ff00000) 249 return (_SVID_libm_err(x, y, 21)); 250 /* x*x overflow */ 251 else if ((ahx < 0x1e56a09e && (ahx | lx) != 0) || 252 (ahx == 0x1e56a09e && lx < 0x667f3bcd)) 253 return (_SVID_libm_err(x, y, 22)); 254 /* x*x underflow */ 255 else 256 return (x * x); 257 } 258 if (hy == 0x3fe00000) { 259 if (!((ahx | lx) == 0 || ((ahx - 0x7ff00000) | lx) == 260 0 || sbx == 1)) 261 return (sqrt(x)); /* y is 0.5 and x > 0 */ 262 } 263 } 264 /* special value of x */ 265 if (lx == 0) { 266 if (ahx == 0x7ff00000 || ahx == 0 || ahx == 0x3ff00000) { 267 /* x is +-0,+-inf,-1 */ 268 z = ax; 269 if (sby == 1) { 270 z = one / z; /* z = |x|**y */ 271 if (ahx == 0) 272 return (_SVID_libm_err(x, y, 23)); |