This is my task:
Write a C function to evaluate the series // cos(x) = x-(x2 /2!)+(x4 /4!)-(x6 /6!)+... etc. Variable realNuber use radians instead of degrees
I lose precision, but I don't understand where. The answer with realNumber = 60 must be 0.500, but I've 0.501. Please help.
#include "stdio.h"
#include "inttypes.h"
double power(float N, uint32_t P){
double buffer = 1;
for (int i = 0; i < P; ++i) {
buffer *= N;
}
return buffer;
}
float factorial(float number){
float result = number;
if (number == 0) {
return 0;
}
for (int i = 0; i < number - 1; ++i) {
result *= i + 1;
}
return result;
}
float cos(float x){
float result = x * (3.14159265359 / 180.);
float polar = -1;
for (int i = 2; i < 10; i += 2) {
result += power(result, i) / factorial(i) * polar;
polar *= -1;
}
return result;
}
int main(void){
float realNumber = 0;
float result = 0;
scanf("%f", &realNumber);
result = cos(realNumber);
printf("%.13f", result);
}
I tried making changes in function cos(); maybe the problem is in a different place?