Вычислить приближенное значение бесконечной суммы с точностью до e=0.0001?
Факториал неверно вычисляется. В вашей функции он всегда равен 1. Ну и, кроме того, программа крайне неоптимально написана.double eps = 0.0001;
double sum = x;
double add = 1;
int i = 1;
do {
    add = -add*x*x/i/(i+1);
    sum += add;
    i += 2;
} while (fabs(add) >= eps);
Навскидку скажу: смотрите в сторону алгоритмов компенсационного суммирования или как его называют суммирование Кэхена. Этот алгоритм позволяет добиться независимости ошибки суммирования от количества слагаемых и в таком случае максимальна ошибка будет равна ошибке представления числа с плавающей точкой.