Flotar y doble Hay dos tipos de datos primitivos en la programación C que se utilizan para almacenar valores decimales . Ambos almacenan números de coma flotante pero difieren en el nivel de precisión con el que pueden almacenar los valores.
En este artículo estudiaremos cada uno de ellos en detalle, su representación en la memoria y la diferencia entre ellos.
Flotar
Float se utiliza para almacenar números de punto flotante de precisión simple. Puede almacenar valores decimales con una precisión de hasta 6-7 decimales.
Sintaxis
float var_name ;>
- El tamaño del flotador es 4 bytes.
- Float puede almacenar valores que varían de 3,4 x 10-38a 3,4x 1038.
- Puede almacenar valores hasta 7 decimales sin pérdida de precisión.
- El especificador de formato para float es %F.
Ejemplo
C
enumeración tostring java
// C Program to illustrate float> #include> > int> main()> {> >// Syntax of declaring and initializing> >// the float variable> >float> myVariable = 789.123456f;> > >// printing floating point number> >printf>(>'Float value is %f'>, myVariable);> >return> 0;> }> |
ventana javascript.abierta
>
>Producción
Float value is 789.123474>
Como puede ver en el resultado anterior, la precisión de los números decimales se pierde después del séptimo dígito debido a los bits limitados en flotante. En estos casos, se recomienda un tipo de datos doble.
Nota: Todos los literales de números reales son de tipo doble por defecto. Podemos agregar un F al final del literal para definirlo como tipo flotante.
al método de cadena en java
Doble
Double se utiliza para almacenar valores de coma flotante de doble precisión. Es la versión mayor de float que puede almacenar números reales con una precisión de hasta 15 decimales.
- El tamaño del doble es 8 bytes.
- El rango de doble es 1.7×10-308a 1,7×10+308.
- Puede almacenar valores hasta 15 puntos decimales sin pérdida de precisión.
- El especificador de formato para doble es %lf
Ejemplo
C
#include> > int> main()> {> >// Syntax of declaring and initializing> >// the double variable> >double> myVariable = 789.123456;> >printf>(>'Double value is %lf'>, myVariable);> >//%lf or %f both can be used to> >// print Float values> >return> 0;> }> |
>
>
forma normal de greibachProducción
Double value is 789.123456>
¿Cómo se almacenan float y double?
El lenguaje C sigue el Estándar IEEE 754 para representar valores de punto flotante en la memoria. A diferencia del tipo int que se almacena directamente en la memoria en forma binaria, los valores flotantes se dividen en dos partes: exponente y mantisa, y luego se almacenan.
Según IEEE 754, los valores de coma flotante constan de 3 componentes:
variables globales js
- Bit de signo: representa el signo del número. 0 representa positivo mientras que 1 representa negativo. Exponente sesgado: el exponente del número no se puede almacenar directamente ya que puede ser tanto negativo como positivo, por lo que usamos un exponente sesgado donde agregamos algo de sesgo al exponente. Mantisa normalizada: Matissa es el número en notación científica, es decir, bits de precisión del número.
Representación de memoria flotante C
El tamaño del flotante es de 32 bits, de los cuales:
- El bit más significativo (MSB) se utiliza para almacenar el firmar del número.
- El siguiente 8 bits se utilizan para almacenar el exponente.
- El restante 23 bits se utilizan para almacenar el mantisa.
Ejemplo
Tomemos 65,125 como número decimal que queremos almacenar en la memoria.
Converting to Binary form, we get: 65 = 1000001 0.125 = 001 So, 65.125 = 1000001.001 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, we will get the baised exponent by adding the exponent to 127, = 127 + 6 = 133 Baised exponent = 10000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000101 00000100100000000000000>
C doble representación de memoria
El tamaño del flotante es de 32 bits, de los cuales:
- El bit más significativo (MSB) se utiliza para almacenar el firmar del número.
- El siguiente 11 bits se utilizan para almacenar el exponente.
- El restante 52 bits se utilizan para almacenar el mantisa.
Ejemplo
Tomemos el ejemplo del mismo número 65,125,
From above, 65.5 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, bais is 1023. So, = 1023 + 6 = 1029 Baised exponent = 10000000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000000101 0000010010000000000000000000000000000000000000000000>
Diferencias entre flotador y doble
Puntos | Flotar | Doble |
|---|---|---|
| Precisión | Float es un punto flotante IEEE 754 de precisión simple que proporciona una precisión de hasta 7 puntos decimales. | Double es un punto flotante IEEE 754 de doble precisión que proporciona una precisión de hasta 15 puntos decimales. |
| Uso de memoria | Float utiliza 32 bits o 4 bytes de memoria. | Double utiliza 64 bits u 8 bytes de memoria. |
| Rango | Float puede almacenar valores que varían desde 3,4 x 10-38a 3,4 x 10+38. | El rango del doble es 1,7×10-308a 1,7×10+308. |
| Especificador de formato | %F es el especificador de formato para float. | %lf es el especificador de formato para doble. |
| Representación de la memoria | Signo = 1 bit Exponente = 8 bits Mantisa = 23 bits | Signo = 1 bit Exponente = 11 bits Mantisa = 52 bits |
Conclusión
En conclusión, C utiliza tanto float como double para números decimales, pero varían en términos de precisión, uso de memoria, rango y velocidad. Cuando el espacio es limitado y la precisión puede verse comprometida, es mejor usar float allí, mientras que double se usa para aplicaciones de alta precisión donde el espacio no es un problema. Es fundamental elegir el tipo de datos adecuado según los requisitos de la aplicación.