Articulo de referencia

formato de punto flotante decimal64

En informática , decimal64 es un formato de número de coma flotante decimal que ocupa 8 bytes (64 bits) en la memoria del ordenador. El formato se introdujo formalmente en la re...

En informática , decimal64 es un formato de número de coma flotante decimal que ocupa 8 bytes (64 bits) en la memoria del ordenador. El formato se introdujo formalmente en la revisión de 2008 [ 1 ] del estándar IEEE 754 , también conocido como ISO / IEC / IEEE 60559:2011. [ 2 ]

Formato

Los valores Decimal64 se clasifican como números normales o subnormales (denormales) y pueden codificarse en formatos binario entero decimal (BID) o decimal densamente empaquetado (DPD). Los valores normales pueden tener una precisión de 16 dígitos que va desde ±1,000000000000000 × 10⁻³⁸³ hasta ±9,9999999999999999 × 10384. Además de los números normales y subnormales, el formato también incluye ceros con signo, infinitos y NaN .

El formato binario de tamaño idéntico admite un espectro desde denormal-min ±5× 10 −324 , pasando por normal-min con precisión completa de 53 bits ±2,2250738585072014× 10 −308 , hasta un máximo de ±1,7976931348623157× 10+308 .

Debido a que la mantisa para el IEEE 754 , los formatos decimales no están normalizados y la mayoría de los valores con menos de 16 dígitos significativos tienen múltiples representaciones posibles; 1000000 × 10 −2 = 100000 × 10 −1 = 10000 × 10 0 = 1000 × 10 1 todos tienen el valor 10000. Estos conjuntos de representaciones para el mismo valor se llaman cohortes . Los diferentes miembros se pueden usar para indicar cuántos dígitos del valor se conocen con precisión. Cada cero con signo tiene 768 representaciones posibles (1536 para todos los ceros, en dos cohortes diferentes).

Codificación de valores decimal64

IEEE 754 permite dos codificaciones alternativas para valores decimal64. El estándar no especifica cómo indicar qué representación se utiliza. Por ejemplo, en una situación donde se comunican valores decimal64 entre sistemas:

Ambas alternativas proporcionan exactamente el mismo conjunto de números representables: 16 dígitos de mantisa y 3 × 2⁸ = 768 posibles valores de exponente decimal. Todos los posibles valores de exponente decimal que se pueden almacenar en un número binario de 64 bits se pueden representar en decimal64, y la mayoría de los bits de la mantisa de un binario de 64 bits se almacenan manteniendo aproximadamente la misma cantidad de dígitos decimales en la mantisa.

En ambos casos, los 4 bits más significativos de la mantisa, que solo tienen 10 valores posibles, se combinan con dos bits del exponente (3 valores posibles) para utilizar 30 de los 32 valores posibles de un campo de 5 bits. Las combinaciones restantes codifican infinitos y NaN . BID y DPD utilizan bits diferentes del campo de combinación.

Para los valores Infinito y NaN, no se utilizan los demás bits de la codificación. Por lo tanto, se puede rellenar una matriz con un único valor de byte para establecerla en Infinito o NaN.

campo de mantisa de enteros binarios

Este formato utiliza una mantisa binaria de 0 a 10 16 − 1 = 9 999 999 999 999 999 = 2386F26FC0FFFF 16 = 1000 1110000110 1111001001 1011111100 0000111111 1111111111 2 . La codificación, almacenada completamente en 64 bits, puede representar mantisas binarias de hasta 10 × 2 50 − 1 = 11 258 999 068 426 239 = 27FFFFFFFFFFFF 16 , pero los valores mayores que 10 16 − 1 son ilegales y el estándar requiere que las implementaciones los traten como 0 si se encuentran en la entrada.

Como se describió anteriormente, la codificación varía dependiendo de si el más significativo4  bits de la mantisa están en el rango de 0 a 7 (0000 2 a 0111 2 ), o más alto (1000 2 o 1001 2 ).

Si los dos bits después del bit de signo son "00", "01" o "10", entonces el campo del exponente consta de:10  bits después del bit de signo y la mantisa es el resto53  bits con un límite implícito0  bits . Esto incluye números subnormales donde el dígito principal de la mantisa es 0.

Si elLos 2  bits posteriores al bit de signo son "11", entonces el campo exponencial de 10 bits se desplaza.2  bits a la derecha (después del bit de signo y los bits "11" que le siguen) y la mantisa representada está en el resto51  bits . En este caso hay una secuencia implícita (es decir, no almacenada) de 3 bits iniciales "100" para los bits MSB de la mantisa verdadera (en los bits inferiores restantes ttt...ttt de la mantisa, no se utilizan todos los valores posibles).

Los bits iniciales del campo mantisa no codifican el dígito decimal más significativo; simplemente forman parte de un número binario puro mayor. Por ejemplo, una mantisa de 8 000 000 000 000 000 se codifica como binario 0111 0001101011 1111010100 1001100011 0100000000 0000000000 2 con el bit inicial4  bits codifican 7; la primera mantisa que requiere un bit 54 es 2 53 = 9 007 199 254 740 992 . La significativa válida más alta es 9 999 999 999 999 999 cuya codificación binaria es (100)0 1110000110 1111001001 1011111100 0000111111 1111111111 2 (con los 3 bits más significativos (100) no almacenados sino implícitos como se muestra arriba; y el siguiente bit siempre es cero en las codificaciones válidas).

En los casos anteriores, el valor representado es

(−1) signo × 10 exponente−398 × mantisa

Si los cuatro bits posteriores al bit de signo son "1111", entonces el valor es infinito o NaN, como se describió anteriormente:

0 11110 xx...x +infinito 1 11110 xx...x -infinito x 11111 0x...xa silencioso NaN x 11111 1x...xa señalizando NaN

Campo de mantisa decimal densamente empaquetado

En esta versión, la mantisa se almacena como una serie de dígitos decimales. El primer dígito se encuentra entre 0 y 9 (3 o 4 bits binarios) y el resto de la mantisa utiliza la codificación decimal densamente empaquetada (DPD).

El líder2  bits del exponente y el dígito principal (3 oLos 4  bits de la mantisa se combinan en los cinco bits que siguen al bit de signo. Los ocho bits siguientes son el campo de continuación del exponente, que proporciona los bits menos significativos del exponente. El último50  bits son el campo de continuación de la mantisa, que consta de cinco declets de 10 bits. [ 3 ] Cada declet codifica tres dígitos decimales [ 3 ] utilizando la codificación DPD.

Si los dos primeros bits que siguen al bit de signo son "00", "01" o "10", representan los bits principales del exponente, mientras que los tres bits siguientes "cde" se consideran el dígito decimal principal (que va de 0 a 7):

Si los dos primeros bits después del bit de signo son "11", entonces los siguientes 2 bits son los bits principales del exponente, y el siguiente bit "e" se antepone con los bits implícitos "100" para formar el dígito decimal principal (8 o 9):

Las dos combinaciones restantes (11 110 y 11 111) del campo de 5 bits después del bit de signo se utilizan para representar ±infinito y NaN, respectivamente.

La transcodificación DPD/3BCD para los declets se muestra en la siguiente tabla. b9...b0 son los bits del DPD y d2...d0 son los tres dígitos BCD.

Los 8 valores decimales cuyos dígitos son todos 8 o 9 tienen cuatro codificaciones cada uno. Los bits marcados con x en la tabla anterior se ignoran en la entrada, pero siempre serán 0 en los resultados calculados. Las 8 × 3 = 24 codificaciones no estándar cubren el intervalo entre 10³ = 1000 y 2¹⁰ = 1024.

En los casos anteriores, con la verdadera mantisa como la secuencia de dígitos decimales decodificados, el valor representado es

(1)señal×10exponentes239810×significado verdadero10{\displaystyle (-1)^{\text{signbit}}\times 10^{{\text{exponentbits}}_{2}-398_{10}}\times {\text{truesignificand}}_{10}}

Implementaciones

Existen diversas bibliotecas disponibles para realizar cálculos con tipos de datos decimales. A continuación se muestran algunos ejemplos:

  • Libdfp implementa el informe técnico ISO/IEC "ISO/IEC TR 24732". La biblioteca implementa funciones matemáticas para entornos basados ​​en gcc y glibc . Utiliza tipos decimales IEEE 754 codificados en BID, con la posibilidad de cambiar al formato de punto flotante Decimal64 mediante la recompilación de gcc . La biblioteca puede ser lenta y, en ocasiones, imprecisa para conversiones y operaciones complejas.
  • La biblioteca Intel Decimal Floating-Point Math Library es una biblioteca C que implementa la especificación IEEE 754-2008 Decimal Floating-Point Arithmetic al abordar los tipos decimales como elementos con nombres específicos . La biblioteca mejora el rendimiento al calcular funciones más complejas en binario cuando es posible, pero esto introduce algunos errores de redondeo binario en los cálculos decimales.UINTxxdecimalxx
  • decNumber proporciona tipos de datos y funciones para calcular valores utilizando números decimales de punto flotante con precisión arbitraria. Ofrece la opción de configurar los parámetros compatibles con IEEE 754 decSingle, decDouble, y decQuad. Realiza conversiones eficientes entre números decimales y cadenas de caracteres.
  • Mpdecimal es una implementación de la Especificación General de Aritmética Decimal propuesta por Mike Cowlishaw , con la opción de establecer parámetros compatibles con el tipo IEEE. Proporciona precisión arbitraria , utilizando un entero de 8 bits para codificar indicadores de tiempo de ejecución y el signo del número. La biblioteca representa números utilizando siete o más palabras dobles o cuádruples, almacenando el exponente con signo, los dígitos, la longitud en palabras, las palabras asignadas, un puntero a datay dataa sí mismo. Datase almacena como una matriz de dos o más palabras, que contiene el coeficiente en elementos de 32 bits (9 dígitos) o 64 bits (19 dígitos). La biblioteca puede manejar una amplia gama de entradas y produce resultados precisos. Está implementada en Python como el decimalmódulo.

Véase también

Referencias

  1. IEEE Computer Society (29 de agosto de 2008). Norma IEEE para aritmética de punto flotante . IEEE . doi : 10.1109/IEEESTD.2008.4610935 . ISBN 978-0-7381-5753-5Norma IEEE 754-2008.
  2. ISO/IEC JTC 1/SC 25 (junio de 2011). ISO/IEC/IEEE 60559:2011 – Tecnología de la información – Sistemas de microprocesadores – Aritmética de punto flotante . ISO. págs. 1–58 . {{cite book}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  3. 1 2 Müller, Jean-Michel; Brisebarre, Nicolás; de Dinechin, Florent; Jeannerod, Claude-Pierre; Lefèvre, Vicente; Melquiond, Guillaume; Revol, Nathalie ; Stehlé, Damián; Torres, Serge (2010). Manual de aritmética de coma flotante (1 ed.). Birkhäuser . doi : 10.1007/978-0-8176-4705-6 . ISBN  978-0-8176-4704-9. LCCN 2009939668 . 
  4. Cowlishaw, Michael Frederic (13 de febrero de 2007) [3 de octubre de 2000]. "Resumen de la codificación decimal densamente empaquetada" . IBM . Archivado del original el 24 de septiembre de 2015. Consultado el 7 de febrero de 2016 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Decimal64_floating-point_format&oldid=1339544306 "