C ++ flotante y doble

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 floaty doublese 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 fo Fal final de un floatvalor. 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 doublevalor a una floatvariable.

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 , 3e5fetc. Ejemplo: 3.56 , 3e5etc.

Nota: A menos que tenga un requisito específico, utilice siempre en doublelugar de float, ya que las floatvariables 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 coutusando la setprecision()función.

Esta función se define en el iomaniparchivo 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 floattiene una precisión de solo 7 dígitos, muestra valores basura después de que se excede su precisión.

Nuestra doublevariable 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 floaty 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 floaty 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 floatsalida en el ejemplo 2. .

Trabajar con números exponenciales

Como se mencionó anteriormente, floaty doubletambié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 scientificformato independientemente del tamaño del número, usamos el especificador de formato scientificdentro 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 coutsin setprecision(), excepto por el hecho de que fixedmuestra números de hasta 6 puntos decimales.

Por otro lado, solo se coutmuestran 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, doubley long double. No hay long float.

Articulos interesantes...