#include <iostream>
#include <math.h>
#include <iomanip>
#include <limits>

using namespace std;

double f_tan(double i);
double f_sin_2(double i);
double f_sin(double i);
double add_phase(double x, double phase = M_PI_2);

int main() {
	
	 int numb_of_loop = 5;
 	
 	 double shift = 0;
 	 double shift_step = 0.01;
 	 for (int j=0; j < 3*numb_of_loop; j++  ) {
		 for (int i=0; i < numb_of_loop; i++  ) {
		    cout << "tan(x) = "   << f_tan(i + shift)   << std::setw(17) 
		    	 << "sin(x)^2 = " << f_sin_2(i + shift) << std::setw(17)
		   		 << "sin(x)/x = " << f_sin(i+shift)   << endl;
		 }
		 
		 	cout << "----------------------" << endl;
		 shift = shift + shift_step;
 	 }
 
	return 0;
}


double f_tan(double i) {
	 double x = add_phase(i*M_PI,M_PI_4);
	 if (cos(x) == 0) {
	 	return std::numeric_limits<double>::infinity();
	 }
	 return tan(x);
}

double f_sin_2(double i) {
	 double x = add_phase(i*M_PI);
	 double y = sin(x);
	 return y*y;
}

double f_sin(double i) {
	double x = add_phase(i*2*M_PI,M_PI_4);
	if (x < 0.00001) {
		return std::numeric_limits<double>::infinity();
	}
	return sin(x)/x;
}

double add_phase(double x, double phase)  {
	return x + phase;
}
