Incorrect term calculation.
Term variables are not re-initialize each loop, which appears to be OP's algorithm's need.
[Edit] Code
double MyCosine(double Angle, int Terms) {
int cont1, cont2, cont3;
double r1, r2, r3;
// r1 = Angle;
int i, n = Terms;
double result = 0.0;
for (i = 0; i <= n; i++) {
r1 = 1.0;
for (cont1 = 0; cont1 < 2 * i; cont1++) {
// r1 = r1 * r1;
r1 = r1 * Angle;
}
r2 = 1.0;
for (cont2 = 1; cont2 <= 2 * i; cont2++) {
r2 = r2 * cont2;
}
r3 = 1;
// for (cont3 = 1; cont3 < i; cont3++) {
for (cont3 = 0; cont3 < i; cont3++) {
// r3 = (-1) * (-1);
r3 = r3 * (-1);
}
result = result + (r1 / r2) * r3;
}
printf("%e %e\n", result, cos(Angle));
return result;
}
A re-write would not need to re-initialize the term and then the nested for
loops could be eliminated. Other simplification exists.