Difference between float and double in C/C++
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++
#include <math.h>
#include <stdio.h>
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);
}
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);
}
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;
}
|
Output
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. |
Last Updated :
23 Jun, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...