import math

#
# Exponencial
#
# Solució 1

def serie_exp_1(x, eps):
    terme = 1
    i = 0
    suma = 0
    while abs(terme)>eps:
        suma = suma + terme
        i = i + 1
        terme = x**i/math.factorial(i)
    return suma

# Solució 2

def serie_exp_2(x, eps):
    terme = 1
    i = 0
    suma = 0
    while abs(terme)>eps:
        suma = suma + terme
        i = i + 1
        terme = terme * x / i
    return suma

# Tria la solució que vulguis provar
# serie_exp = serie_exp_1
serie_exp = serie_exp_2

#
# Cosinus
# 
# Solució 1

def serie_cos_1(x, eps):
    terme = 1
    i = 0
    suma = 0
    while abs(terme)>eps:
        suma = suma + terme
        i = i + 1
        terme = x**(2*i)/math.factorial(2*i)
        terme = terme*(-1)**i
    return suma

# Solució 2

def serie_cos_2(x, eps):
    terme = 1
    i = 0
    suma = 0
    while abs(terme)>eps:
        suma = suma + terme
        terme = - terme * x**2 / ((i+1)*(i+2))
        i = i + 2
    return suma

# Tria la solució que vulguis provar
# serie_cos = serie_cos_1
serie_cos = serie_cos_2

#
# Sinus
#
# Solució 1

def serie_sin_1(x, eps):
    terme = x
    i = 0
    suma = 0
    while abs(terme)>eps:
        suma = suma + terme
        i = i + 1
        terme = x**(2*i+1)/math.factorial(2*i+1)
        terme = terme*(-1)**i
    return suma

# Solució 2

def serie_sin_2(x, eps):
    terme = x
    i = 1
    suma = 0
    while abs(terme)>eps:
        suma = suma + terme
        terme = - terme * x**2/ ((i+1)*(i+2))
        i = i + 2
    return suma

# Tria la solució que vulguis provar
# serie_sin = serie_sin_1
serie_sin = serie_sin_2
