def exp(x, err=defaultError): """ Return exponential of x. """ if err <= defaultError: reduced = rational.Rational(x) if reduced < 0: reverse = -1 reduced = -reduced else: reverse = 1 i = 0 while reduced >= 2: reduced /= 2 i += 1 if reduced == 0: retval = rational.Integer(1) else: series = ExponentialPowerSeries( itertools.cycle((rational.Integer(1), ))) retval = series(reduced, err) if i > 0: retval **= 2**i if reverse < 0: retval = 1 / retval else: retval = rational.Rational(math.exp(x)) return retval