18      return std::numeric_limits<double>::quiet_NaN();
 
   20    if (std::isinf(
y) && (
x == 1 || 
x == -1)) {
 
   26      return std::numeric_limits<double>::quiet_NaN();
 
   30      x = std::numeric_limits<double>::quiet_NaN();
 
   38    } 
else if (
y == 0.5) {
 
   41        return std::numeric_limits<double>::infinity();
 
   44        return std::sqrt(
x + 0);
 
   48    return std::pow(
x, 
y);