To represent floating point numbers, we use float, double, and long double. What’s the difference? double has 2x more precision than float. float is a 32-bit IEEE 754 single precision Floating Point Number – 1 bit for the sign, 8 bits for the exponent, and 23* for the value. float has 7 decimal digits of precision. double is a 64-bit IEEE 754 double precision Floating Point Number – 1 bit for the sign, 11 bits for the exponent, and 52* bits for the value. double has 15 decimal digits of precision.
Let’s take an example: For a quadratic equation x^2 – 4.0000000 x + 3.9999999 = 0, the exact roots to 10 significant digits are, r1 = 2.000316228 and r2 = 1.999683772. Notice the difference in using float and double.
// C program to demonstrate // double and float precision values #include <math.h> #include <stdio.h> // utility function which calculate roots of // quadratic equation using double values void double_solve( double a, double b, double c)
{ double d = b * b - 4.0 * a * c;
double sd = sqrt (d);
double r1 = (-b + sd) / (2.0 * a);
double r2 = (-b - sd) / (2.0 * a);
printf ( " % .5f\t % .5f\n " , r1, r2);
} // utility function which calculate roots of // quadratic equation using float values void float_solve( float a, float b, float c)
{ float d = b * b - 4.0f * a * c;
float sd = sqrtf(d);
float r1 = (-b + sd) / (2.0f * a);
float r2 = (-b - sd) / (2.0f * a);
printf ( " % .5f\t % .5f\n " , r1, r2);
} // driver program int main()
{ float fa = 1.0f;
float fb = -4.0000000f;
float fc = 3.9999999f;
double da = 1.0;
double db = -4.0000000;
double dc = 3.9999999;
printf ( "roots of equation x^2- 4.0000000 x + 3.9999999= "
"0 are: \n " );
printf ( "for float values: \n" );
float_solve(fa, fb, fc);
printf ( "for double values: \n" );
double_solve(da, db, dc);
return 0;
} |
roots of equation x2- 4.0000000 x + 3.9999999= 0 are: for float values: 2.00000 2.00000 for double values: 2.00032 1.99968
Complexity Analysis
- The time complexity of the given code is O(1)
- The auxiliary space complexity of the code is also O(1)
Difference between float and double
Let us see the differences in a tabular form that is as follows:
float |
double |
---|---|
Its size is 4 bytes | Its size is 8 bytes |
It has 7 decimal digits precision | It has 15 decimal digits precision |
It is an integer data type but with decimals | It is an integer data type but with decimals |
It may get Precision errors while dealing with large numbers | It will not get precision errors while dealing with large numbers. |
This data type supports up to 7 digits of storage. | This data type supports up to 15 digits of storage. |
For float data type, the format specifier is %f. | For double data type, the format specifier is %lf. |
For example -: 3.1415 | For example -: 5.3645803 |
It is less costly in terms of memory usage. | It is costly in terms of memory usage. |
It requires less memory space as compared to double data type. | It needs more resources such as occupying more memory space in comparison to float data type. |
It is suitable in graphics libraries for greater processing power because of its small range. | It is suitable to use in the programming language to prevent errors while rounding off the decimal values because of its wide range. |