sym pow(const sym &s,const rational &q) { if(typeid(*s.expr)==typeid(sym::sym_num)) return sym(pow(((sym::sym_num *)s.expr)->value,q.eval())); sym snew; snew.context=s.check_context(); delete snew.expr; snew.expr=s.expr->clone(); snew.expr=snew.expr->pow(q)->reduce(); return snew; }
bool rational::operator<(const rational &q) const { return eval()<q.eval(); }
bool rational::operator>(const rational &q) const { return eval()>q.eval(); }
sym::sym(const rational &q) { context=NULL; expr=new sym::sym_num(q.eval()); }