/*
 * Arquivo: prog1.14.c
 * -------------------
 * Este programa é uma solução do Problema 1.14 do Caderno
 * de Exercícios.
 */
#include <stdio.h>
#include <math.h>
#include "genlib.h"
#include "simpio.h"

double modulo(double);

main()
{
    double x, soma_parcial, parcela, epsilon;
    int k;

    printf("Qual 'e o valor de x? ");
    x = GetReal();
    printf("Qual 'e o valor de epsilon? ");
    epsilon = GetReal();

    soma_parcial = x;
    parcela = x;
    k = 0;

    while (modulo(parcela) > epsilon) {
	k++;
	parcela *= -x * x / (2 * k * (2 * k + 1));
	soma_parcial += parcela;
    }

    printf("Aproximacao obtida para sen(%g): %g\n", x, soma_parcial);
    printf("Aproximacao fornecida por math para sen(%g): %g\n", x, sin(x));
}

double modulo(double z)
{				/* Se bem que existe fabs() em math... */
    if (z >= 0)
	return z;
    else
	return -z;
}
