float: número de coma flotante de precisión simpleOcupa 4 bytes en la máquina, descrito en 32 bits binarios.

double: número de coma flotante de doble precisiónOcupa 8 bytes en la máquina, descrito en 64 bits binarios.

Los números de coma flotante se representan internamente en forma exponencial y se descomponen en:signo del número, mantisa, signo del exponente y exponentecuatro partes.

El signo del número ocupa 1 bit binario e indica si el número es positivo o negativo.

El signo del exponente ocupa 1 bit binario e indica si el exponente es positivo o negativo.

La mantisa representa los dígitos significativos del número de coma flotante, 0.xxxxxxx, pero no se almacenan el 0 inicial ni el punto.

El exponente almacena los dígitos significativos del exponente.

Cuántos bits ocupa el exponente y cuántos ocupa la mantisa lo decide el sistema informático.

Puede ser que el signo del número más la mantisa ocupen 24 bits, y el signo del exponente más el exponente ocupen 8 bits --float。

el signo del número más la mantisa ocupen 48 bits, y el signo del exponente más el exponente ocupen 16 bits --double。

Conociendo la ocupación de estas cuatro partes, se estima el rango en binario y luego se convierte a decimal; ese es el rango numérico que quieres saber.

Para los programadores, la diferencia entre double y float es que double tiene mayor precisión, con 16 dígitos significativos, mientras que float tiene 7 dígitos. Pero double consume el doble de memoria que float, y la velocidad de cálculo de double es mucho más lenta que la de float. En C, los nombres de las funciones matemáticas para double y float son diferentes; no los escribas mal. Cuando se pueda usar precisión simple, no uses doble precisión (para ahorrar memoria y acelerar la velocidad de cálculo).

TipoNúmero de bitsDígitos significativosRango numérico
float32 6-7 -3.4*10(-38)~3.4*10(38)
double 64 15-16 -1.7*10(-308)~1.7*10(308)
long double 128 18-19 -1.2*10(-4932)~1.2*10(4932)

En pocas palabras, float es de precisión simple, ocupa 4 bytes en memoria y tiene 7 dígitos significativos (no 8 por el signo positivo/negativo); en mi ordenador y en la plataforma VC++6.0, por defecto se muestran 6 dígitos significativos. double es de doble precisión, ocupa 8 bytes y tiene 16 dígitos significativos, pero en mi ordenador y en la plataforma VC++6.0, por defecto también se muestran 6 dígitos significativos.

Ejemplo: en C y C++, la siguiente sentencia de asignación:

float a=0.1; 

El compilador muestra un error:warning C4305: 'initializing' : truncation from 'const double ' to 'float '

Causa:En C/C++ (no sé si solo ocurre en VC++), en la sentencia anterior, 0.1 a la derecha del signo igual: creemos que es un float, pero el compilador lo considera un double (porque los decimales son double por defecto), por lo que se genera este warning. Generalmente se cambia a0.1fy no hay problema.

Mi práctica habitual es usar double con frecuencia y no me gusta usar float.

En los lenguajes C y C#, para datos de tipo coma flotante se utiliza el tipo de precisión simplefloaty el tipo de doble precisióndoublepara almacenar,floatlos datos ocupan 32 bits,doublelos datos ocupan 64 bits; al declarar una variablefloat f= 2.25f¿cómo se asigna la memoria? Si se asignara al azar, el mundo sería un caos. En realidad, tanto float como double siguen las especificaciones del IEEE en su almacenamiento: float sigue IEEE R32.24 y double sigue R64.53.

Tanto la precisión simple como la doble se dividen en tres partes en el almacenamiento:

  • Bit de signo (Sign): 0 representa positivo, 1 representa negativo.
  • Bit de exponente (Exponent): se utiliza para almacenar los datos del exponente en notación científica y emplea almacenamiento con desplazamiento.
  • Parte de mantisa (Mantissa): la parte de la mantisa.

Dirección de origen: https://my.oschina.net/zd370982/blog/724265