C Program: Sine Series

For an angle $x$ in radians, the sine series is given by

$sin(x) = x - \frac{x^{3}}{3!} + \frac{x^{5}}{5!} - \frac{x^{7}}{7!} + ...$

Colin Maclaurin. Public Domain

It can be derived by applying Maclaurin's Series to the sine function. The sine series is convergent for all values of $x$.

We observe the terms of the series and note that the numerators are odd powers of a given radian value $x$, i.e., $x^{2n + 1}$, where $n = 0,1,2,3, ... $, and the corresponding denominators are the factorials of the same odd power $(2n+1)!$ as that of the numerator. We define two functions to compute these powers and factorials — power() and factorial().

The series summation takes place inside the while loop; even terms are added and odd terms are subtracted.

				
				#include <stdio.h>
				unsigned long factorial(unsigned short int);
				float power(float, unsigned short int);
				int main() {
					unsigned short n, i = 0;
					float x, sum = 0;
					printf("n: ");
					scanf("%hu", &n);
					printf("x: ");
					scanf("%f", &x);
					while(i < n) {
						if(i%2 == 0)
							sum += power(x,2*i+1)/(float) factorial(2*i+1);
						else 
							sum -= power(x,2*i+1)/(float) factorial(2*i+1);
						i++;
					}
					printf("Sum upto %hd terms = %f", n, sum);
					return 0;
				}
				float power(float x, unsigned short n) {
					float pow = 1;
					while(n > 0) { 
						pow *= x;
						--n; 
					}
					return pow;
				}
				unsigned long factorial(unsigned short n) {
					unsigned long f;
					if(n == 0 || n == 1)
						return 1;
					else
						f = n * factorial(n-1);
					return f;
				}
				
			

We will verify the results of our summation upto a considerable number of terms $n$ for some well-known angles/values of $x$ (radians).

When the angle is equal to $0\deg$ ($x = 0$), the series value is $0$ for any value of $n$.

When the angle is equal to $30°$ ($x = 0.523599$ radians), our summation result should give the value close to $\frac{1}{2} = 0.5$, for some term $n$.

And when the angle equals $90°$ ($x = 1.5708$ radians), the sum should come close to 1 for some significant term $n$.