He visto la siguiente tabla en Wikipedia:
Sinembargo,nopudeencontrarunaexplicaciónsobrequéson"precisión de bits" y "número de dígitos decimales" y cómo se relacionan. ¿Qué significan exactamente? ¿Cómo convertir entre ellos?
Gracias
He visto la siguiente tabla en Wikipedia:
Sinembargo,nopudeencontrarunaexplicaciónsobrequéson"precisión de bits" y "número de dígitos decimales" y cómo se relacionan. ¿Qué significan exactamente? ¿Cómo convertir entre ellos?
Gracias
Las dos respuestas (JRE y Spehro Pefhany) están bien excepto el punto flotante IEEE tiene una característica adicional.
Espero que quede claro que
2.3 x 10 ^ 2 = 23 x 10 ^ 1 = 230 x 10 ^ 0
Crearía más trabajo para el hardware si los tres fueran válidos (traducidos a base 2). Por ejemplo, dos patrones de bits diferentes podrían ser el mismo número.
Por lo tanto, IEEE exige que el bit superior de la mantisa sea siempre 1. Esta es una representación normalizada. Cada número solo se almacena como un patrón de bits específico.
Luego, como el primer bit siempre es 1, no está almacenado . Por lo tanto, la mantisa es en realidad 1 bit más larga que la almacenada debido a este 1 bit superior implícito.
Tomemos un ejemplo: 2.5E3 que sería 2.5 * 10 ^ 3. El 2.5 se conoce como la mantisa, 3 se conoce como el exponente.
Con un número de punto flotante, tiene un cierto número de bits para representar ambas cosas juntas.
Para el punto flotante de precisión simple, tiene 32 bits para representar la mantisa y el exponente. Los 32 bits disponibles se dividen en 24 para la mantisa y 8 para el exponente. Los 24 bits para la mantisa representan un número decimal.
El número de punto flotante completo solo tendrá 24 bits que son significativos (que no son cero). Este número (24) es también los bits de precisión dados en la tabla. El exponente luego dice cuántos ceros agregar al final. El número más grande que puede representar con 24 bits es 16777215. Tiene 7 dígitos que pueden representar de 0 a 9, y un dígito que solo puede representar de 0 a 1: esta es la precisión decimal.
Como lo mencionó Spehro Pefhany, puede calcular el número de dígitos de precisión a partir de los bits de precisión multiplicando los bits de precisión por ln (2) / ln (10) - para 24 bits que le da 7.225 dígitos de precisión cuando el número binario se imprime en forma decimal.
El número de bits se puede convertir a dígitos decimales multiplicándolo por ln (2) / ln (10) ~ = 0.3.
Esto supone que el signo se maneja de manera similar en cada caso.
Un número que puede variar de 0 a 99.9 en incrementos de 0.1 tiene una precisión de log2 (100 / 0.1) ~ = 10 bits (dígitos binarios) y una precisión decimal de log10 (100 / 0.1) = 3 dígitos decimales.
De manera similar, la precisión en cualquier base n dada es logn (100 / 0.1). Si n = 16 (hexadecimal) la precisión es ~ 2.5 nibbles.
Utilicé el ejemplo de incremento de 99.9 y 0.1 porque los bits en una mantisa de número de punto flotante no representan directamente la magnitud (tienen que ser multiplicados por dos elevados a la potencia del exponente) o a la izquierda / derecha un número de tiempos dependientes del valor exponente.
Si la mantisa es de 24 bits, puede representar 2 ^ 24 valores diferentes y tiene una precisión de log10 (2 ^ 24) = 7.2 dígitos decimales. Si lo consideras como una fracción de 0 a 1, solo podría moverse en incrementos de 1/2 ^ 24 o 0.00000005960. Eso es un poco difícil de visualizar, tal vez, así que usé el ejemplo decimal.
En el caso de una calculadora de bolsillo típica, realmente funcionan en decimal internamente, por lo que obtendrás una precisión "par" de número de dígitos. Por ejemplo, una calculadora de 8 dígitos tendría una precisión de aproximadamente 25.6 bits (representada ineficientemente en 32 bits internamente, generalmente porque las calculadoras usan un decimal codificado en binario).
Lea otras preguntas en las etiquetas floating-point