Number* Rational::expt(Number* obj){ if(sgn()<0){ Complex* c = new Complex(); c = SCAST_COMPLEX(c->convert(this)); Complex* d = SCAST_COMPLEX(c->convert(obj)); return c->expt(d); }else{ Float* tmpf = new Float(); tmpf = SCAST_FLOAT(tmpf->convert(obj)); return new Float(pow(double(*this), double(*SCAST_RATIONAL(obj)))); } }
Number* Rational::expp(Number* number2) { Rational* rtmp2 = SCAST_RATIONAL(number2); if (num_==ZERO_ && rtmp2->num_==ZERO_) return new Float(1); else if (num_==ZERO_ && rtmp2->num_!=ZERO_) return new Float(0); if(num_.sgn_) { Complex* c = new Complex; c = SCAST_COMPLEX(c->convert(this)); Complex* d = SCAST_COMPLEX(c->convert(rtmp2)); return c->expp(d); } else { Float* tmpf = new Float; tmpf = SCAST_FLOAT(tmpf->convert(rtmp2)); return new Float(pow(SCAST_FLOAT(tmpf->convert(this))->number_, tmpf->number_)); } }