En este tutorial, aprenderemos sobre los tipos de datos flotantes y dobles con la ayuda de ejemplos. También veremos algunas de las diferencias clave entre ellos y cuándo usarlos.
En C ++, ambos tipos de datos float
y double
se utilizan para valores de punto flotante. Los números de coma flotante se utilizan para valores decimales y exponenciales . Por ejemplo,
// creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5
Debemos agregar el sufijo f
o F
al final de un float
valor. Esto se debe a que el compilador interpreta los valores decimales sin el sufijo como double
.
Considere este código.
float a = 5.6;
Aquí, le hemos asignado un double
valor a una float
variable.
En este caso, el compilador convierte automáticamente a 5.6float
antes de asignarlo a la variable a. Esto puede resultar en la pérdida de datos. Para obtener más información, visite Conversión de tipos de C ++.
Diferencia entre flotar y doble
flotador | doble |
---|---|
Tamaño: 4 bytes | Tamaño: 8 bytes |
Precisión: en general, precisión de 7 dígitos decimales | Precisión: en general, precisión de 15 dígitos decimales |
Ejemplo: 3.56f , 3e5f etc. | Ejemplo: 3.56 , 3e5 etc. |
Nota: A menos que tenga un requisito específico, utilice siempre en double
lugar de float
, ya que las float
variables pueden ser propensas a introducir errores cuando se trabaja con números grandes.
Ejemplo 1: C ++ float y double
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Salida
Número de tipo doble = 3.91235 Número de tipo flotante = 3.91235
Nota: El compilador utilizado para este ejemplo (compilador MinGW) permitió 6 dígitos. Por lo tanto, el compilador redondeó y truncó los valores de nuestras variables a 6 dígitos.
setprecision () para especificar puntos decimales
Podemos especificar el número de puntos decimales para imprimir cout
usando la setprecision()
función.
Esta función se define en el iomanip
archivo de encabezado, que significa manipulación de entrada / salida .
Ejemplo 2: uso de setprecision () para números de coma flotante
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Salida
Número de tipo doble = 3.912348239293 Número de tipo flotante = 3.912348270416
Como podemos ver en el ejemplo anterior, hemos especificado la precisión de hasta 13 dígitos.
cout << setprecision(13);
El valor de punto flotante que hemos asignado a nuestras variables también consta de 13 dígitos.
Sin embargo, dado que float
tiene una precisión de solo 7 dígitos, muestra valores basura después de que se excede su precisión.
Nuestra double
variable muestra el número correcto porque tiene una precisión de 15 dígitos, mientras que el número en sí consta de 13 dígitos.
Como alternativa, podemos especificar diferentes precisiones para diferentes variables mientras las imprimimos.
Ejemplo 3: diferentes precisiones para diferentes variables
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )
Salida
Número de tipo doble = 3.9123482393 Número de tipo flotante = 3.912348
En el programa anterior, podemos ver que hemos establecido dos valores de precisión diferentes para float
y double
.
En ambos casos, la precisión es menor que los dígitos reales del número. Entonces, el último dígito se redondea y el resto se trunca.
Nota: Si especificamos una precisión mayor que la precisión del tipo de datos en sí (7 para float
y 15 para double
), entonces el compilador nos dará valores basura después de que se haya excedido el límite de precisión, como se puede ver con la float
salida en el ejemplo 2. .
Trabajar con números exponenciales
Como se mencionó anteriormente, float
y double
también se puede usar para representar números exponenciales . Por ejemplo,
// ex = 325 X (10 25) double ex = 325E25;
C ++ genera números exponenciales y números muy grandes en un formato llamado formato científico . La variable ex se generará en este formato de forma predeterminada, ya que es un número muy grande.
Para forzar a C ++ a mostrar nuestros números de punto flotante en el scientific
formato independientemente del tamaño del número, usamos el especificador de formato scientific
dentro de cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Además de esto, hay otro especificador de formato conocido como fixed
, que muestra números de punto flotante en formato decimal.
Es similar a mostrar números de punto flotante usando solo cout
sin setprecision()
, excepto por el hecho de que fixed
muestra números de hasta 6 puntos decimales.
Por otro lado, solo se cout
muestran los dígitos según el compilador específico (6 dígitos en total en el caso del compilador MinGW , incluidos los dígitos antes del punto decimal).
Ejemplo 4: Formatos fijos y científicos
#include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )
Salida
Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004
long double
Apart from float
and double
, there is another data type that can store floating-point numbers. This is known as long double
.
It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double
, though most of the time, it is greater than that of double
.
long double
values should end with L
. For example,
// declaring a long double variable long double num_ldb = 2.569L;
Nota: Los tipos de datos de punto flotante admitidos por C ++ son float
, double
y long double
. No hay long float
.