示例#1
0
def atan(x, err=defaultError):
    """
    atan(x [,err]) returns arc tangent of x.
    """
    if not isinstance(err, defaultError.__class__) or err <= defaultError:
        # atan(x) = -atan(-x)
        if x < 0:
            return -atan(-x, err)
        # atan(x) = pi/2 - atan(1/x)
        elif x > 1:
            return pi(err) / 2 - atan(1 / x, err)
        elif x == 1:
            return pi(err) / 4
        elif x == 0:
            return rational.Integer(0)
        y = rational.Rational(x)
        y2 = y**2
        retval = y
        oldvalue = 0
        term = rational.Rational(x)
        i = 1
        while not err.nearlyEqual(retval, oldvalue):
            oldvalue = +retval
            i += 2
            term *= -y2 * (i - 2) / i
            retval += term
    else:
        retval = rational.Rational(math.atan(x))
    return retval