public static RealInterval oddRoot(RealInterval x, double y)
    throws IAException
  {
    double ylo,yhi,zlo,zhi;

    if (y == 0.0)
      //      throw new IAException("oddRoot(X,y): y=0 not allowed");
      return RealInterval.fullInterval();
    else if (y > 0.0) {
      ylo = RMath.div_lo(1.0,y);
      yhi = RMath.div_hi(1.0,y);
      if (x.lo >= 1.0)
        zlo = RMath.pow_lo(x.lo,ylo);
      else if (x.lo >=  0.0)
        zlo = RMath.pow_lo(x.lo,yhi);
      else if (x.lo >= -1.0) 
        zlo = -RMath.pow_hi(-x.lo,ylo);
      else 
        zlo = -RMath.pow_hi(-x.lo,yhi);

      if (x.hi >= 1.0)
        zhi = RMath.pow_hi( x.hi,yhi);
      else if (x.hi >=  0.0)
        zhi = RMath.pow_hi( x.hi,ylo);
      else if (x.hi >= -1.0) 
        zhi = -RMath.pow_lo(-x.hi,yhi);
      else 
        zhi = -RMath.pow_lo(-x.hi,ylo);


      return new RealInterval(zlo,zhi);
    }
    else if (y < 0.0) {
      return div(new RealInterval(1.0),oddRoot(x,-y));
    }
    else
      throw new IAException("oddRoot(X,y): y=NaN not allowed");
  }