In C++, there are various data types like `string`, `int`, `char`, `bool`, `float`, and `double`. Each of these data types have specific values that can be stored in them.

When working with integers, we usually store them in an `int` data type. But this is only useful for whole numbers.

When we want to store numbers with decimals, we can either use the `float` or `double`. Though these two data types are used for a similar purpose, they have some differences.

In this article, we'll talk about the differences between floats and doubles in C++ along with some examples.

## Difference Between Floats and Doubles

This section will be divided into sub-sections with each section focusing on one difference between floats and doubles.

### Difference in Byte Size

The byte size for `float` is 4 while the byte size for `double` is 8.

This implies that `double` can store values that are twice the amount that `float` can hold.

We can see this by using the `sizeof()` operator. Here is an example:

``````#include <iostream>
using namespace std;
int main() {

cout << "float: " << sizeof(float) << endl; // float: 4
cout << "double: " << sizeof(double) << endl;// double: 8

}``````

### Difference in Precision (Accuracy)

When working with numbers that have a lot of decimal digits, we usually hope that the resulting value will be accurate. But the accuracy of our result is dependent on the number of decimal digits we are dealing with.

Don't worry, we're still talking about C++, not mathematics.

`float` and `double` both have varying capacities when it comes to the number of decimal digits they can hold. `float` can hold up to 7 decimal digits accurately while `double` can hold up to 15.

Let's see some examples to demonstrate this.

``````#include <iomanip>
#include <iostream>
using namespace std;

int main() {
double MY_DOUBLE_VALUE = 5.12345678987;

float MY_FLOAT_VALUE = 5.12345678987;

cout << setprecision(7);
cout << MY_DOUBLE_VALUE << endl; // 5.123457
cout << MY_FLOAT_VALUE << endl; // 5.123457
}``````

In the example above, we created `float` and `double` variables – both having the same value: `5.12345678987`.

The `setprecision()` function is used to tell the compiler the number of decimal places we want printed out. In our case, the value is 7.

We can observe from the results in the code above, that both variables printed accurate values up to the 7th decimal place: `5.123457`.

Let's increase the parameter in the `setprecision()` function to 12 and see what happens.

``````#include <iomanip>
#include <iostream>
using namespace std;

int main() {
double MY_DOUBLE_VALUE = 5.12345678987;

float MY_FLOAT_VALUE = 5.12345678987;

cout << setprecision(12);
cout << MY_DOUBLE_VALUE << endl; // 5.12345678987
cout << MY_FLOAT_VALUE << endl; // 5.12345695496
}``````

From the results above, the `MY_DOUBLE_VALUE` variable printed out accurate values. But the `MY_FLOAT_VALUE` variable, from its 7th decimal place, printed out values entirely different from the original value it was given.

This shows us the precision of both data types. Just like `float`, if we try to return a value that exceeds the accuracy range for the `double` data type, we will get an inaccurate value returned.

### Difference in Usage

`float` is mostly used in graphic libraries for high processing power due to its small range.

`double` is mostly used for calculations in programming to eliminate errors when decimal values are being rounded off. Although `float` can still be used, it should only be in cases when we're dealing with small decimal values. To be on the safe side, you should always use `double`.