visual tipos studio que programacion float ejemplos datos c# java c++ floating-point int

c# - studio - tipos de variables en java ejemplos



¿Por qué float e int tienen valores máximos tan diferentes aunque sean el mismo número de bits? (4)

Estos se basan en la especificación de punto flotante IEEE754, por eso es posible. Por favor lea esta documentation . No se trata solo de cuántos bits.

Posible duplicado:
¿Cuál es la diferencia entre el tipo de datos flotante y entero cuando el tamaño es el mismo en Java?

Como probablemente sepas, ambos tipos son de 32 bits. int solo puede contener números enteros, mientras que float también admite números de punto flotante (como sugieren los nombres de tipo).

¿Cómo es posible que el valor máximo de int sea ​​2 31 , y el valor máximo de float sea ​​3.4 * 10 38 , mientras que ambos sean de 32 bits?

Creo que la capacidad de valor máximo de int debería ser mayor que el valor flotante porque no guarda la memoria para el número flotante y solo acepta números enteros. Me alegraré por una explicación en ese caso.


La pista está en la parte "flotante" de "punto flotante". Lo que dices básicamente asume un punto fijo. Un número de punto flotante no "reserva espacio" para los dígitos después del punto decimal; tiene un número limitado de dígitos (23 binarios) y recuerda la potencia de dos para multiplicarlo.


Su intuición le dice muy acertadamente que no puede haber más contenido de información en uno que en el otro, porque ambos tienen 32 bits. Pero eso no significa que no podamos usar esos bits para representar valores diferentes.

Supongamos que invento dos tipos de datos nuevos, uint4 y foo4 . uint4 usa 4 bits para representar un entero, en la representación binaria estándar, por lo que tenemos

bits value 0000 0 0001 1 0010 2 ... 1111 15

Pero foo4 usa 4 bits para representar estos valores:

bits value 0000 0 0001 42 0010 -97 0011 1 ... 1110 pi 1111 e

Ahora foo4 tiene un rango de valores mucho más amplio que uint4 , ¡a pesar de tener el mismo número de bits! ¿Cómo? Debido a que hay algunos valores uint4 que no pueden ser representados por foo4 , esas "ranuras" en la asignación de bits están disponibles para otros valores.

Es lo mismo para int y float : ambos pueden almacenar valores de un conjunto de 2 32 valores, solo conjuntos diferentes de 2 32 valores.


Un flotador puede almacenar un valor numérico más alto, pero no será preciso incluso en los dígitos anteriores al punto decimal. Considere el siguiente ejemplo:

float a = 123456789012345678901234567890f; //30 digits Console.WriteLine(a); // 1.234568E+29

Tenga en cuenta que apenas se mantiene ninguna precisión.

Un entero, por otro lado, siempre almacenará con precisión cualquier número dentro de su rango de valores.

Para fines de comparación, veamos un número de punto flotante de doble precisión:

double a = 123456789012345678901234567890d; //30 digits Console.WriteLine(a); // 1.23456789012346E+29

Observe que se conservan aproximadamente el doble de dígitos significativos.