El estándar IEEE 754-2008 incluye formatos de números de punto flotante decimal en los que la mantisa y el exponente (y las cargas útiles de NaN ) se pueden codificar de dos maneras, denominadas codificación binaria y codificación decimal . [ 1 ]
Ambos formatos descomponen un número en un bit de signo s , un exponente q (entre q min y q max ) y una mantisa c de p dígitos (entre 0 y 10 p −1). El valor codificado es ( − 1) s ×10 q × c . En ambos formatos, el rango de valores posibles es idéntico, pero difieren en cómo se representa la mantisa c . En la codificación decimal, se codifica como una serie de p dígitos decimales (utilizando la codificación decimal densamente empaquetada (DPD)), mientras que en la codificación decimal entera binaria ( BID ), se codifica como un número binario.
Formato
Utilizando el hecho de que 2¹⁰ = 1024 es solo un poco mayor que 10³ = 1000, los números decimales de 3n dígitos se pueden empaquetar eficientemente en 10ⁿ bits binarios. Sin embargo, los formatos IEEE tienen mantisas de 3n + 1 dígitos, que generalmente requerirían 10ⁿ + 4 bits binarios para su representación.
Esto no sería eficiente, ya que solo se necesitan 10 de los 16 valores posibles de los cuatro bits adicionales. Se puede diseñar una codificación más eficiente utilizando el hecho de que el rango del exponente es de la forma 3×2 k , por lo que el exponente nunca comienza con 11. Usando la codificación Decimal32 (con una mantisa de 3*2+1 dígitos decimales) como ejemplo ( erepresenta el exponente, mla mantisa, es decir, la mantisa):
- Si la mantisa comienza con
0mmm, al omitir el bit 0 inicial, la mantisa cabe en 23 bits:
s 00eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 01eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 10eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm
- Si la mantisa comienza con
100m, al omitir los 100 bits iniciales, la mantisa cabe en 21 bits. El exponente se desplaza 2 bits, y un11par de bits muestra que se está utilizando esta forma:
s 1100eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1101eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1110eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
- Infinito, NaN silencioso y NaN de señalización utilizan codificaciones que comienzan con
s 1111:
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxx s 111110 xxxxxxxxxxxxxxxxxxxxxxxxx s 111111 xxxxxxxxxxxxxxxxxxxxxxxxx
Los bits que se muestran entre paréntesis son implícitos : no están incluidos en los 32 bits de la codificación Decimal32, pero están implícitos en los dos bits que siguen al bit de signo.
Las codificaciones Decimal64 y Decimal128 tienen campos de exponente y mantisa más grandes, pero funcionan de manera similar.
Para la codificación Decimal128, 113 bits de mantisa son suficientes para codificar 34 dígitos decimales, y la segunda forma nunca es necesaria.
Cohorte
Un número decimal de punto flotante puede codificarse de varias maneras; cada una representa una precisión distinta. Por ejemplo, 100.0 se codifica como 1000×10⁻¹ , mientras que 100.00 se codifica como 10000×10⁻² . El conjunto de posibles codificaciones del mismo valor numérico se denomina cohorte en el estándar. Si el resultado de un cálculo es inexacto, se conserva la mayor cantidad de datos significativos seleccionando el miembro de la cohorte con el entero más grande que se puede almacenar en la mantisa junto con el exponente requerido.
Rango
La norma IEEE 754r propuesta limita el rango de números a una mantisa de la forma 10 n − 1, donde n es el número de dígitos decimales enteros que se pueden almacenar en los bits disponibles para que el redondeo decimal se realice correctamente.
Actuación
La codificación binaria es inherentemente menos eficiente para conversiones hacia o desde datos codificados en decimal, como cadenas ( ASCII , Unicode , etc.) y BCD . Por lo tanto, la codificación binaria se recomienda únicamente cuando los datos son binarios en lugar de decimales. IBM ha publicado algunos datos de rendimiento no verificados. [ 2 ]
Véase también
Referencias
Lecturas adicionales
- Savard, John JG (2018) [2007]. "El estándar de punto flotante decimal" . quadibloc . Archivado del original el 3 de julio de 2018. Recuperado el 16 de julio de 2018 .
- aritmética informática