objeto - tipos de variables en java ejemplos
¿Cuál es la diferencia entre el tipo de datos flotante y entero cuando el tamaño es el mismo? (2)
Los flotadores se utilizan para almacenar un rango de números más amplio que el que se puede ajustar en un entero. Estos incluyen números decimales y números de estilo de notación científica que pueden ser valores más grandes que los que caben en 32 bits. Aquí está la inmersión profunda en ellos: http://en.wikipedia.org/wiki/Floating_point
¿Cuál es la diferencia entre el tipo de datos flotante y entero cuando el tamaño es el mismo?
-
float
almacena valores de punto flotante, es decir, valores que tienen posiciones decimales potenciales -
int
solo almacena valores enteros, es decir, números enteros
Entonces, mientras que ambos tienen 32 bits de ancho, su uso (y representación) es bastante diferente. No puede almacenar 3.141 en un entero, pero sí puede hacerlo en un float
.
Diseccionándolos un poco más lejos:
En un entero, todos los bits se utilizan para almacenar el valor numérico. Esto se hace (en Java y en muchas computadoras también) en el llamado complemento a dos . Esto básicamente significa que puedes representar los valores de −2 31 a 2 31 - 1.
En un flotador, esos 32 bits se dividen en tres partes distintas: el bit de signo, el exponente y la mantisa. Se presentan de la siguiente manera:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
Hay un solo bit que determina si el número es negativo o no negativo (cero no es ni positivo ni negativo, pero tiene el bit de signo establecido en cero). Luego hay ocho bits de un exponente y 23 bits de mantisa. Para obtener un número útil de eso, (aproximadamente) se realiza el siguiente cálculo:
M × 2 E
(Hay más que eso, pero esto debería ser suficiente para el propósito de esta discusión)
La mantisa es en esencia no mucho más que un número entero de 24 bits. Esto se multiplica por 2 a la potencia de la parte exponente, que, más o menos, es un número entre -128 y 127.
Por lo tanto, puede representar con precisión todos los números que cabrían en un entero de 24 bits, pero el rango numérico también es mucho mayor a medida que los exponentes más grandes permiten valores más grandes. Por ejemplo, el valor máximo para un float
es alrededor de 3.4 × 10 38, mientras que int
solo permite valores de hasta 2.1 × 10 9 .
Pero eso también significa que, dado que 32 bits solo tienen 4,2 × 10 9 estados diferentes (que se usan para representar los valores que int
puede almacenar), que en el extremo más grande del rango numérico del float
los números están más separados (dado que no puede haber más números float
únicos que hay números int
únicos). No puedes representar algunos números exactamente, entonces. Por ejemplo, el número 2 × 10 12 tiene una representación en float
de 1.999.999.991.808. Eso podría ser cerca de 2,000,000,000,000 pero no es exacto. Del mismo modo, agregar 1 a ese número no lo cambia porque 1 es demasiado pequeño para hacer una diferencia en las escalas más grandes que el float
está usando allí.
Del mismo modo, también puede representar números muy pequeños (entre 0 y 1) en un float
pero independientemente de si los números son muy grandes o muy pequeños, el float
solo tiene una precisión de alrededor de 6 o 7 dígitos decimales. Si tiene números grandes, esos dígitos están al principio del número (por ejemplo, 4.51534 × 10 35 , que no es más que 451534, sigue 30 ceros) y Float no puede decir nada útil acerca de si esos 30 dígitos son realmente ceros u otra cosa) , para números muy pequeños (p. ej., 3.14159 × 10 -27 ) están al final del número, mucho más allá de los dígitos iniciales de 0.0000 ...