The <math.h> library in C has several trig functions depending on the argument passed to the function. For the sine value of an angle, they are:
double sin(double)
float sinf(float)
long double sinl(long double)
In C++, the <cmath> library recognizes these C functions, but uses the sin function for all data types. The function is overloaded.
Does it make a difference what type of floating number to use? What happens with the functions when different types are passed?
Microsoft implements the floating-point data types as:
float 4 bytes 3.4E +/- 38 (7 digits)
double 8 bytes 1.7E +/- 308 (15 digits)
long double same as double
Visual C++ doesn’t support the long double.
Attempt #1 – Float v Double
I have an angle in radians: 1.1234567890123456789. Assigning this value to a float or double definitely makes a difference and it should.
float fAngle = 1.1234567890123456789;
double dAngle = 1.1234567890123456789;
fAngle becomes 1.1234568, 7 digits of precision.
dAngle becomes 1.1234567890123457, 16 digits of precision.
Attempt #2 – Sine of Float v Double
float fAngle = 1.1234567890123456789;
double dAngle = 1.1234567890123456789;
float fSine = 0;
double dSine = 0;
fSine = sin(fAngle);
dSine = sin(dAngle);
fSine becomes 0.90160114.
dSine becomes 0.90160112364986666.
The difference is 0.000000016350134024 or 1/100,000,000 or 1/1E08.
Attempt #3 – sin v sinf Functions
In C, the sin function is used for double numbers and sinf for float.
This code
fSine = sinf(fAngle);
and this code
fSine = sinf(dAngle);
result in the same return value of 0.90160114.
In the second instance, the code converts the double value to a float and returns a float.
No comments:
Post a Comment