def cos(x, err=defaultError): """ cos(x [,err]) returns the cosine of x. """ if err <= defaultError: rx = rational.Rational(x) sign = rational.Rational(1) # cos(-x) = cos(x) if rx < 0: rx = -rx # cos(x + 2 * pi) = cos(x) if rx > 2 * pi: rx -= floor(rx / (pi * 2)) * (pi * 2) # cos(x + pi) = -cos(x) if rx > pi: rx -= pi sign = -sign # cos(x) = -cos(pi - x) if rx > pi / 2: rx = pi - rx sign = -sign # cos(x) = sin(pi/2 - x) (pi/2 >= x > 4/pi) if rx > pi / 4: if rx == pi / 3: retval = rational.Rational(1, 2) else: retval = _sinTaylor(pi / 2 - rx, err) elif rx == pi / 4: retval = 1 / sqrt(2) elif rx == pi / 6: retval = sqrt(3) / 2 else: retval = _cosTaylor(rx, err) if retval > 1: retval = rational.Integer(1) retval *= sign else: retval = rational.Rational(math.cos(x)) return retval