Original article: Double VS Float in C++ – The Difference Between Floats and Doubles

En C++, existen varios tipos de datos como string, int, char, bool, float y double. Cada uno de estos tipos de datos tiene valores específicos que se pueden almacenar en ellos.

Cuando trabajamos con números enteros, generalmente los almacenamos en un tipo de dato int. Sin embargo, esto solo es útil para números enteros.

Cuando queremos almacenar números con decimales, podemos usar float o double. Aunque estos dos tipos de datos se utilizan para un propósito similar, tienen algunas diferencias.

En este artículo, hablaremos sobre las diferencias entre float y double en C++ junto con algunos ejemplos.

Diferencia entre Floats y Doubles

Esta sección se dividirá en secciones más pequeñas, cada una enfocada en una diferencia entre float y double.

Diferencia en el tamaño en bytes

El tamaño en bytes para float es 4, mientras que el tamaño en bytes para double es 8. Esto implica que double puede almacenar valores que son el doble de la cantidad que float puede contener. Podemos comprobar esto usando el operador sizeof(). Aquí tienes un ejemplo:

#include <iostream>
using namespace std;
int main() {
    
    cout << "float: " << sizeof(float) << endl; // float: 4
    cout << "double: " << sizeof(double) << endl;// double: 8

}

Diferencia en la precisión (exactitud)

Cuando trabajamos con números que tienen muchas cifras decimales, generalmente esperamos que el valor resultante sea preciso. Sin embargo, la precisión de nuestro resultado depende de la cantidad de cifras decimales con las que estamos tratando. No te preocupes, seguimos hablando de C++, no de matemáticas.

float y double tienen capacidades variables cuando se trata de la cantidad de cifras decimales que pueden contener. float puede mantener hasta 7 cifras decimales de manera precisa, mientras que double puede mantener hasta 15.

Veamos algunos ejemplos para demostrar esto:

#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
}

En el ejemplo anterior, creamos variables float y double, ambas con el mismo valor: 5.12345678987. La función setprecision() se utiliza para indicar al compilador la cantidad de decimales que deseamos que se impriman. En nuestro caso, el valor es 7.

Podemos observar en los resultados del código anterior que ambas variables imprimieron valores precisos hasta el séptimo lugar decimal: 5.123457.

Ahora aumentemos el parámetro en la función setprecision() a 12 y veamos qué pasa:

#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
}

De los resultados anteriores, podemos ver que la variable MY_DOUBLE_VALUE imprimió valores precisos. Sin embargo, la variable MY_FLOAT_VALUE, a partir del séptimo lugar decimal, imprimió valores completamente diferentes al valor original que se le dio. Esto nos muestra la diferencia en la precisión de ambos tipos de datos. Al igual que float, si intentamos devolver un valor que excede el rango de precisión del tipo de dato double, obtendremos un valor inexacto.

Diferencia en el uso


float se utiliza principalmente en bibliotecas gráficas para aplicaciones que requieren un alto poder de procesamiento debido a su rango limitado.
double se utiliza principalmente en cálculos de programación para eliminar errores cuando se redondean valores decimales. Aunque float todavía se puede utilizar, solo debe hacerse en casos en los que se estén manejando valores decimales pequeños. Para estar seguro, siempre se debe utilizar double.

Esta información destaca la importancia de elegir el tipo de dato adecuado según las necesidades de precisión y rango de tus cálculos en C++.

Conclusión

En este artículo, hemos hablado de las diferencias entre float y double en C++. Hemos destacado tres diferencias clave: tamaño en bytes, precisión y casos de uso.

Hemos aprendido que los doubles tienen el doble del tamaño en bytes de los floats y son más precisos al trabajar con valores decimales grandes. Además, hemos explorado los casos de uso que nos ayudan a comprender cuándo utilizar cada tipo de dato.

¡Feliz codificación!