the - ¿Por qué double.MaxValue es más grande que long.MaxValue?
double traduccion (4)
ambos tienen 8 bytes, pero ¿por qué el valor máximo para el doble es mucho mayor que el valor máximo de long? hay un número finito de bits disponibles, entonces, ¿cómo podría alcanzar números mayores con variables de punto flotante?
Un doble tiene algo llamado exponente, que es básicamente un factor de escala. Esto permite que el rango de doble sea mucho mayor, pero a un costo de precisión.
A long es un valor entero simple sin factor de escala.
Utiliza una representación diferente (punto flotante) usando exponentes y mantisa.
Para más detalles ver IEEE754
Los números de punto flotante consisten en una mantisa y un exponente, y el valor de un número de punto flotante es:
mantisa * 2 exponente
El exponente en un doble es de 11 bits, por lo que el valor máximo es de la magnitud 2 2 11 - 1 = 2 1024 , que es mucho más que la magnitud de un doble con signo de 64 bits, que es 2 63 -1.
Porque la representación en coma flotante es de menor precisión. Mientras que el tipo long
puede representar todos los números enteros en el rango desde el mínimo hasta el máximo, el tipo double
solo puede representar algunos de ellos.
Como ocupan la misma cantidad de bits, la cantidad de números que cada uno puede expresar es casi igual (en realidad, el double
puede representar menos números). Sólo los pasos entre estos números son diferentes.