El estándar IEEE 754-2008 incluye formatos numéricos de coma flotante decimal en los que el significado y el exponente (y las cargas útiles de NaN ) se pueden codificar de dos formas, denominadas codificación binaria y codificación decimal . [1]
Ambos formatos dividen un número en un bit de signo s , un exponente q (entre q min y q max ) y un p -digit significand c (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 el significado c . En la codificación decimal, se codifica como una serie de p dígitos decimales (utilizando el decimal densamente empaquetado(Codificación DPD)). Esto hace que la conversión a forma decimal sea eficiente, pero requiere una ALU decimal especializada para su procesamiento. En la codificación decimal entera binaria ( BID ), se codifica como un número binario.
Formato
Usando el hecho de que 2 10 = 1024 es solo un poco más que 10 3 = 1000, se pueden empaquetar eficientemente 3 números decimales de n dígitos en 10 n bits binarios. Sin embargo, los formatos IEEE tienen significados de 3 n + 1 dígitos, que generalmente requerirían 10 n + 4 bits binarios para representar.
Esto no sería eficaz, porque sólo se necesitan 10 de los 16 valores posibles de los 4 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 un significado de 3 * 2 + 1 dígitos decimales) como ejemplo ( e
significa exponente, m
mantisa, es decir, significando):
- Si el significado comienza con
0mmm
, omitir el bit 0 inicial permite que el significado quepa en 23 bits:
s 00eeeeee (0) mmm mmmmmmmmmm mmmmmmmmmms 01eeeeee (0) mmm mmmmmmmmmm mmmmmmmmmms 10eeeeee (0) mmm mmmmmmmmmm mmmmmmmmmm
- Si el significando comienza con
100m
, omitir los 100 bits iniciales permite que el significando quepa en 21 bits. El exponente se desplaza sobre 2 bits y un11
par de bits muestra que se está utilizando esta forma:
s 1100eeeeee (100) m mmmmmmmmmm mmmmmmmmmms 1101eeeeee (100) m mmmmmmmmmm mmmmmmmmmms 1110eeeeee (100) m mmmmmmmmmm mmmmmmmmmm
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxxs 111110 xxxxxxxxxxxxxxxxxxxxxxxxxs 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 significado más grandes, pero funcionan de manera similar.
Para la codificación Decimal128, 113 bits de significando son en realidad suficientes para codificar 34 dígitos decimales, y la segunda forma nunca es realmente necesaria.
Grupo
Un número de coma flotante decimal se puede codificar de varias formas, las diferentes formas representan diferentes precisiones, por ejemplo, 100.0 se codifica como 1000 × 10 −1 , mientras que 100.00 se codifica como 10000 × 10 −2 . 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, la mayor cantidad de datos significativos se conserva seleccionando el miembro de la cohorte con el número entero más grande que se puede almacenar en el significado junto con el exponente requerido.
Distancia
El estándar IEEE 754r propuesto limita el rango de números a un significado 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 efectúe correctamente.
32 bits | 64 bits | 128 bits | |
---|---|---|---|
Bits de almacenamiento | 32 | 64 | 128 |
Trailing Significand bits | 20 | 50 | 110 |
Bits significativos | 23/24 | 53/54 | 113 |
Dígitos significativos | 7 | dieciséis | 34 |
Bits de combinación | 11 | 13 | 17 |
Bits de exponente | 8 | 10 | 14 |
Parcialidad | 101 | 398 | 6176 |
Emax estándar | 96 | 384 | 6144 |
Emin estándar | −95 | −383 | −6143 |
Actuación
Una 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, es mejor elegir una codificación binaria solo cuando los datos son binarios en lugar de decimales. IBM ha publicado algunos datos de rendimiento no verificados. [2]
Ver también
Referencias
- ^ "PROYECTO de estándar para aritmética de punto flotante P754" (PDF) . 2006-10-04 . Consultado el 1 de julio de 2007 .[ enlace muerto permanente ]
- ^ http://speleotrove.com/decimal/decperf.html
Otras lecturas
- Savard, John JG (2018) [2007]. "El estándar de coma flotante decimal" . quadibloc . Archivado desde el original el 3 de julio de 2018 . Consultado el 16 de julio de 2018 .