formato de coma flotante decimal64 - decimal64 floating-point format

En informática , decimal64 es un formato de numeración de computadora de punto flotante decimal que ocupa 8 bytes (64 bits) en la memoria de la computadora. Está destinado a aplicaciones en las que es necesario emular el redondeo decimal de forma exacta, como cálculos financieros y fiscales.

Decimal64 admite 16 dígitos decimales de significando y un rango de exponente de −383 a +384, es decir, ± 0.000 000 000 000 000 × 10 −383^ a ± 9,999 999 999 999 999 × 10 384^ . (De manera equivalente, ± 0 000 000 000 000 000 × 10 -398^ a ± 9 999 999 999 999 999 × 10 369^ ). En contraste, el formato binario correspondiente, que es el tipo más comúnmente usado, tiene un rango aproximado de ± 0,000 000 000 000 001 × 10 −308^ a ± 1.797 693 134 862 315 × 10 308^ . Debido a que el significado no está normalizado, la mayoría de los valores con menos de 16 dígitos significativos tienen múltiples representaciones posibles; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 , etc. El cero tiene 768 representaciones posibles (1536 si se incluyen ambos ceros con signo ).

El punto flotante decimal64 es un formato de punto flotante decimal relativamente nuevo, introducido formalmente en la versión 2008 de IEEE 754 , así como con ISO / IEC / IEEE 60559: 2011 .

Representación de valores decimal64

Firmar Combinación Continuación del exponente Continuación significativa
1 bit 5 bits 8 bits 50 bits
s mmmmm xxxxxxxx cccccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754 permite dos métodos de representación alternativos para valores decimal64. El estándar no especifica cómo significar qué representación se utiliza, por ejemplo, en una situación en la que los valores decimal64 se comunican entre sistemas:

Ambas alternativas proporcionan exactamente el mismo rango de números representables: 16 dígitos de significando y 3 × 2 8  = 768 posibles valores de exponente decimal. (Todos los posibles valores de exponentes decimales almacenables en un número binary64 se pueden representar en decimal64, y la mayoría de los bits del significado de un binary64 se almacenan manteniendo aproximadamente el mismo número de dígitos decimales en el significado).

En ambos casos, los 4 bits más significativos del significando (que en realidad solo tienen 10 valores posibles) se combinan con los 2 bits más significativos del exponente (3 valores posibles) para usar 30 de los 32 valores posibles de un valor de 5 bits. campo. Las combinaciones restantes codifican infinitos y NaN .

Campo de combinación Msbits de exponente Msbits significativos Otro
00mmm 00 0xxx -
01mmm 01 0xxx -
10 mm 10 0xxx -
El 1100m 00 100 veces -
1101m 01 100 veces -
El 1110m 10 100 veces -
11110 - - ± Infinito
11111 - - Yaya. Bit de signo ignorado. El primer bit del campo de continuación del exponente determina si NaN está señalizando.

En los casos de Infinity y NaN, todos los demás bits de la codificación se ignoran. Por lo tanto, es posible inicializar una matriz a infinitos o NaN llenándola con un valor de un solo byte.

Campo de significado de entero binario

Este formato utiliza un significand binario de 0 a 10 16  - 1 = 9 999 999 999 999 999  = 2386F26FC0FFFF 16  = 1000 1110000110 1111001001 1011111100 0000111111 1111111111 2 .

La codificación, completamente almacenado en 64 bits, puede representar significandos binarias de hasta 10 × 2 50  - 1 = 11 258 999 068 426 239  = 27FFFFFFFFFFFF 16 , pero los valores más grandes que 10 16  - 1 son ilegal (y la norma requiere implementaciones de tratar ellos como 0, si se encuentran en la entrada).

Como se describió anteriormente, la codificación varía dependiendo de si los 4 bits más significativos del significando están en el rango de 0 a 7 (0000 2 a 0111 2 ), o superior (1000 2 o 1001 2 ).

Si los 2 bits después del bit de signo son "00", "01" o "10", entonces el campo de exponente consta de los 10 bits que siguen al bit de signo y el significado son los 53 bits restantes, con un 0 implícito a la izquierda. un poco:

s 00eeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
s 01eeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
s 10eeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt

Esto incluye números subnormales donde el primer dígito significativo es 0.

Si los 2 bits después del bit de signo son "11", entonces el campo exponente de 10 bits se desplaza 2 bits a la derecha (después del bit de signo y los bits "11" a partir de entonces), y el significado representado está en el resto 51 bits. En este caso, hay una secuencia inicial de 3 bits "100" implícita (es decir, no almacenada) para la mayoría de los bits del significado verdadero (en los bits inferiores restantes ttt ... ttt del significado, no todos los valores posibles son usó).

s 1100eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
s 1101eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
s 1110eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt

La secuencia de 2 bits "11" después del bit de signo indica que hay un prefijo implícito de 3 bits "100" en el significado. Compare tener un prefijo implícito de 1 bit "1" en el significado de los valores normales para los formatos binarios. Las secuencias de 2 bits "00", "01" o "10" después del bit de signo son parte del campo exponente.

Los bits iniciales del campo de significado no codifican el dígito decimal más significativo; son simplemente parte de un número binario puro más grande. Por ejemplo, un significado de 8 000 000 000 000 000 se codifica como binario 0111 0001101011 1111010100 1001100011 0100000000 0000000000 2 , con los 4 bits iniciales codificados 7; la primera significand que requiere un poco 54a es 2 53  = 9 007 199 254 740 992 . El más elevado válido significativo es 9 999 999 999 999 999 cuyo binario de codificación es (100) 0 1110000110 1111001001 1011111100 0000111111 1111111111 2 (con los 3 bits más significativos (100) que no están almacenados pero implícito como se muestra anteriormente, y el siguiente bit es siempre cero en codificaciones válidas).

En los casos anteriores, el valor representado es

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

Si los cuatro bits después del bit de signo son "1111", entonces el valor es infinito o NaN, como se describe anteriormente:

s 11110 xx...x    ±infinity
s 11111 0x...x    a quiet NaN
s 11111 1x...x    a signalling NaN

Campo de significado decimal densamente empaquetado

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

Los 2 bits iniciales del exponente y el dígito inicial (3 o 4 bits) del significando se combinan en los cinco bits que siguen al bit de signo.

Estos ocho bits después de eso son el campo de continuación del exponente, que proporciona los bits menos significativos del exponente.

Los últimos 50 bits son el campo de continuación significativo, que consta de cinco declets de 10 bits . Cada delet codifica tres dígitos decimales utilizando la codificación DPD.

Si los dos primeros bits después del bit de signo son "00", "01" o "10", entonces esos son los bits iniciales del exponente y los tres bits "TTT" posteriores se interpretan como el dígito decimal inicial ( 0 a 7):

s 00 TTT (00)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
s 01 TTT (01)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
s 10 TTT (10)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]

Si los dos primeros bits después del bit de signo son "11", los segundos 2 bits son los bits iniciales del exponente y el siguiente bit "T" tiene el prefijo "100" implícito para formar el dígito decimal inicial ( 8 o 9):

s 1100 T (00)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
s 1101 T (01)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
s 1110 T (10)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]

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 proporciona en la siguiente tabla. b9 ... b0 son los bits del DPD y d2 ... d0 son los tres dígitos BCD.

Reglas de codificación decimal densamente empaquetadas
Valor codificado DPD Dígitos decimales
Espacio de código (1024 estados) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Valores codificados Descripción Ocurrencias (1000 estados)
50,0% (512 estados) a B C D mi F 0 gramo h I 0 abc 0 def 0 ghi (0–7) (0–7) (0–7) Tres dígitos pequeños 51,2% (512 estados)
37,5% (384 estados) a B C D mi F 1 0 0 I 0 abc 0 def 100 i (0–7) (0–7) (8–9) Dos dígitos pequeños,
uno grande
38,4% (384 estados)
a B C gramo h F 1 0 1 I 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
gramo h C D mi F 1 1 0 I 100 c 0 def 0 ghi (8–9) (0–7) (0–7)
9.375% (96 estados) gramo h C 0 0 F 1 1 1 I 100 c 100 f 0 ghi (8–9) (8–9) (0–7) Un dígito pequeño,
dos grandes
9,6% (96 estados)
D mi C 0 1 F 1 1 1 I 100 c 0 def 100 i (8–9) (0–7) (8–9)
a B C 1 0 F 1 1 1 I 0 abc 100 f 100 i (0–7) (8–9) (8–9)
3,125% (32 estados, 8 usados) X X C 1 1 F 1 1 1 I 100 c 100 f 100 i (8–9) (8–9) (8–9) Tres dígitos grandes, a los bits b9 y b8 no les importa 0,8% (8 estados)

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 codificaciones no estándar 8 × 3 = 24 llenan el espacio entre 10 3  = 1000 y 2 10  = 1024.)

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

Ver también

Referencias