The <cmath> library in C++ (<math.h> in C) has functions to calculate cosine and arccosine values. The cos function takes an angle measured in radians and returns the cosine value. The acos function takes a cosine value and returns an angle in radians. Both functions use floating-point precision numbers.

Click here for a quick refresher on degrees to radians.

But what is cosine?

The cosine of an angle is defined as the ratio of the adjacent side of a right-angle triangle over the hypotenuse.

The graph shows the cosine values from 0 to 360 degrees (0 to 2 pi radians). The range is -1 to 1.

**Cos and Acos Functions in C/C++.**

The sample code below defines several one-dimensional arrays to hold:

fDegAngle[5] angle in degrees (given value).

fRadAngle[5] angle in radians (calculated from degrees).

fCosine [5] the sine value from the C/C++ functions.

fArccosine [5] the arccosine value from the C/C++ function.

fRevDegAngle[5] the angle in degree determined from the arccosine value.

The starting point is to define 5 angles in degrees: 0, 90, 180, 270, 360.

**Sample Code.**

The sample code was created in MS Visual C++ 2010 as a Windows Form Application. It contains a form (Form1) that displays when the program runs. The sample code, contained in the Form Load Event, executes and adds text to a RichTextBox named rtOut.

// Math functions library.

#include <cmath>

// Create constant for PI.

#define PI 3.14159265

...

// cosine function

rtOut->Text = "The cosine and arccosine functions.\n\n";

rtOut->Text += "The range of cosine values is: 1 to -1.\n";

rtOut->Text += "The range of arccosine values is: 0 to PI radians or 0 to 180 degrees.\n";

rtOut->Text += "\n";

int i = 0;

double fCosine[5];

double fArccosine[5];

double fRadAngle[5];

double fDegAngle[5];

double fRevDegAngle[5];

// 360 degrees = 2 x PI x radians

// 180 degrees = PI x radians

// 1 degree = PI / 180 radians

// 90 degree = 90 x PI / 180 radians = 1.570796

// 1 radian = 180 / PI degree

// Calculations

// Loop through for degrees: 0, 90, 180, 270, 360.

for (i; i < 5; i++)

{

// Set degrees.

fDegAngle[i] = 90 * i;

// Need radians.

fRadAngle[i] = fDegAngle[i] * PI / 180.0;

// cosin(1.570796 rads) = 0

fCosine[i] = cos(fRadAngle[i]);

// Returns angle in radians.

fArccosine[i] = acos(fCosine[i]);

// Find degree of angle based on arccosine.

fRevDegAngle[i] = fArccosine[i] * 180 / PI;

} // for

// Display values.

for (i = 0; i < 5; i++)

{

rtOut->Text += fDegAngle[i] + " degrees is " + fRadAngle[i] + " radians.\n";

rtOut->Text += "The cosine of " + fRadAngle[i] + " radians is " + fCosine[i] + ".\n";

rtOut->Text += "The arccosine of " + fCosine[i] + " is " + fArccosine[i] + " radians.\n";

rtOut->Text += "The arccosine of " + fCosine[i] + " is " + fRevDegAngle[i] + " degrees.\n";

rtOut->Text += "\n";

} // for

rtOut->Text += "The small floating point numbers (e.g., 1.79489673696541E-09) are effectively zero.\n";

rtOut->Text += "\n";

**Output.**

The cosine and arccosine functions.

The range of cosine values is: 1 to -1.

The range of arccosine values is: 0 to PI radians or 0 to 180 degrees.

0 degrees is 0 radians.

The cosine of 0 radians is 1.

The arccosine of 1 is 0 radians.

The arccosine of 1 is 0 degrees.

90 degrees is 1.570796325 radians.

The cosine of 1.570796325 radians is 1.79489673696541E-09.

The arccosine of 1.79489673696541E-09 is 1.570796325 radians.

The arccosine of 1.79489673696541E-09 is 90 degrees.

180 degrees is 3.14159265 radians.

The cosine of 3.14159265 radians is -1.

The arccosine of -1 is 3.14159265358979 radians.

The arccosine of -1 is 180.00000020568 degrees.

270 degrees is 4.712388975 radians.

The cosine of 4.712388975 radians is -5.38468932271781E-09.

The arccosine of -5.38468932271781E-09 is 1.57079633217959 radians.

The arccosine of -5.38468932271781E-09 is 90.00000041136 degrees.

360 degrees is 6.2831853 radians.

The cosine of 6.2831853 radians is 1.

The arccosine of 1 is 0 radians.

The arccosine of 1 is 0 degrees.

The small floating point numbers (e.g., 1.79489673696541E-09) are effectively zero.

**C/C++ Standards.**

The ISO C Standard specifies separate functions depending on the argument data type (double, float, long double): cos, cosf, cosl, acos, acosf and acosl. The images below show the C standard documentation.

In C++ both the cos and acos functions are overloaded. They accept float, double or long double and return the same data type.

## No comments:

## Post a Comment