stringtranslate.com

formato de punto flotante decimal32

En informática , decimal32 es un formato de numeración decimal de punto flotante que ocupa 4 bytes (32 bits) en la memoria de la computadora. Al igual que los formatos binary16 y binary32 , está pensado para el almacenamiento de memoria.

A diferencia de los formatos de datos binarios xxx, los formatos decimales xxx proporcionan una representación exacta de fracciones decimales, cálculos exactos con ellas y permiten el redondeo común de "puntos que se alejan de cero" (en algún rango, con cierta precisión, hasta cierto punto). A cambio de un rendimiento reducido, están pensados ​​para aplicaciones en las que se requieren cálculos matemáticos escolares exactos, como cálculos financieros y fiscales. (En resumen, evitan muchos problemas como 0,2 + 0,1 -> 0,30000000000000004 que ocurren con los tipos de datos binarios).

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

decimal32 admite 7 dígitos decimales de significación y un rango de exponentes de −95 a +96, para valores "normales" que pueden tener 7 dígitos de significación. Los valores "anormales" con dígitos menos significativos llegan más abajo, hasta 1E-101. Es decir, ±0,000 001 × 10 −95^ a ± 9,999 999 × 10 96^ , y cero, infinitos y NaN. (Equivalentemente, ±1 × 10 −101^ a ±9 999 999 × 10 90^ ).

(Lo que se almacena en bits se puede interpretar como 'valor almacenado para el exponente menos el sesgo de 95' por el significado de la mantisa entendida como d_0.d_-1 d_-2 d_-3 d_-4 d_-5 d_-6 (nota: punto de base después del primer dígito, la mantisa es fraccionaria), o 'valor almacenado para el exponente menos el sesgo de 101' por el significado de la mantisa entendida como d_6 d_5 d_4 d_3 d_2 d_1 d_0 (nota: sin punto de base, la mantisa es integral), ambos conducen al mismo resultado [versión 2019 [3] de IEEE 754 en la cláusula 3.3, página 18]. Para los tipos de datos decimales, la segunda vista es más común, mientras que para los tipos de datos binarios la primera.)

El formato binario correspondiente binary32 tiene un rango aproximado de ±1 × 10 −45^ a ±3,402 823 5 × 10 38^ .

Debido a que el mantis no está normalizado (se permite que el dígito principal sea "0"), la mayoría de los valores con menos de 7 dígitos significativos tienen múltiples representaciones posibles; 1 000 000 × 10 -2 = 100 000 × 10 -1 = 10 000 × 10 0 tienen todos el valor 10 000. Estos conjuntos de representaciones para un mismo valor se denominan cohortes , los diferentes miembros se pueden usar para indicar cuántos dígitos del valor se conocen con precisión. El cero tiene 192 representaciones posibles (384 cuando se incluyen ambos ceros con signo ).

Representación de valores decimal32

Los valores decimal32 se representan en una forma "no normalizada" y con la combinación de algunos bits del exponente con los bits iniciales de la mantisa en un "campo de combinación".

Esto permite un poco más de precisión y alcance, a cambio de que algunas funciones simples como ordenar y comparar, que se usan con mucha frecuencia en la codificación, no funcionan en el patrón de bits, sino que requieren cálculos para extraer el exponente y la mantisa y luego tratar de obtener una representación alineada con el exponente. Este esfuerzo se equilibra en parte al ahorrar el esfuerzo de normalización, pero contribuye al rendimiento más lento de los tipos de datos decimales.

La norma IEEE 754 permite dos métodos de representación alternativos para los valores decimal32. La norma no especifica cómo indicar qué representación se utiliza, por ejemplo, en una situación en la que se comunican valores decimal32 entre sistemas.

En un método de representación basado en el decimal entero binario (BID), el mantisa se representa como un entero positivo codificado en binario.

El otro método de representación alternativo se basa en decimal densamente empaquetado (DPD) para la mayoría de los mantis (excepto el dígito más significativo).

Ambas alternativas proporcionan exactamente el mismo rango de números representables: 7 dígitos de significación y 3 × 2 6 = 192 posibles valores de exponente.

¡PRECAUCIÓN!: la transferencia de la representación binaria entre sistemas que utilizan diferentes codificaciones se entenderá (en su mayoría) como un número decimal32 válido, pero con un valor diferente ; es preferible transferirlo como 'tripletes' de ASCII o representaciones integrales de signo, exponente y significando.

La posición de los bits relevantes en el campo de combinación es diferente entre BID y DPD, pero la funcionalidad es similar, consulte las tablas a continuación. Esto proporciona un cierto ahorro de bits porque los 2 MSB del exponente solo usan tres estados, y los 4 MSB del mantisa permanecen entre 0000 .. 1001 ( 10 estados ). En total tenemos 3*10 = 30 valores posibles cuando se combinan en una codificación, que se puede representar en 5 bits ( ⁠ ⁠ ).

En todos los casos, el valor representado es

(−1) signo × 10 exponente − 101 × significación , entendida como significación entera positiva.

Alternativamente, puede entenderse como (−1) signo × 10 exponente − 95 × significando con los dígitos de significando entendidos como d_0 . d_-1 d_-2 d_-3 d_-4 d_-5 d_-6, note el punto en la base que lo convierte en una fracción.

Para ±Infinity, además del bit de signo, todos los bits restantes se ignoran (es decir, tanto los campos de exponente como de mantisa no tienen efecto). Para los NaN, el bit de signo no tiene significado en el estándar y se ignora. Por lo tanto, los NaN con signo y sin signo son equivalentes, aunque algunos programas mostrarán los NaN como con signo. El bit g5 determina si el NaN es silencioso (0) o señalizador (1). Los bits de la mantisa son la carga útil del NaN y pueden contener datos definidos por el usuario (por ejemplo, para distinguir cómo se generaron los NaN). Al igual que para las mantisas normales, la carga útil de los NaN puede estar en codificación BID o DPD.

Tenga en cuenta que la numeración de bits utilizada aquí, por ejemplo, g10... g0, está en dirección opuesta a la utilizada en el documento para el estándar IEEE 754 g0... g10.

El exponente resultante es un entero binario de 8 bits donde los bits iniciales no son '11', por lo tanto los valores 0 .. 1011 1111 b = 191 d . El mantisa resultante podría ser un entero binario positivo de 24 bits hasta 1001 1111111111 111111111 b = 10485759 d , pero los valores superiores a 10 7 − 1 = 9 999 999 = 98967F 16 = 1001 1000100101 1001111111 2 son 'ilegales' y tienen que ser tratados como ceros. Para obtener los dígitos decimales individuales el mantisa tiene que ser dividido por 10 repetidamente.

El exponente resultante es un entero binario de 8 bits donde los bits iniciales no son '11', por lo tanto los valores son 0 .. 1011 1111 b = 191 d . El dígito decimal inicial del mantisa se forma a partir de los bits ( 0 )cde o 100e como entero binario. Para obtener los dígitos decimales finales del mantisa, los campos de declet 'tttttttttt' tienen que ser decodificados de acuerdo con las reglas DPD (ver abajo). El mantisa decimal completo se obtiene entonces concatenando los dígitos decimales inicial y final.

La transcodificación de DPD de 10 bits a BCD de 3 dígitos 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. Tenga en cuenta que la numeración de bits utilizada aquí, por ejemplo, b9 .. b0, está en dirección opuesta a la utilizada en el documento para el estándar IEEE 754 b0 .. b9, add. Los dígitos decimales se numeran aquí con base 0, mientras que en dirección opuesta y con base 1 en el documento IEEE 754.

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 ).

La ventaja de esta codificación es el acceso a dígitos individuales mediante la descodificación/decodificación de solo 10 bits; la desventaja es que algunas funciones simples como ordenar y comparar, muy frecuentemente utilizadas en la codificación, no funcionan en el patrón de bits, sino que requieren decodificación a dígitos decimales (y eventualmente recodificación a números enteros binarios) primero.

Véase también

Referencias

  1. ^ IEEE Computer Society (29 de agosto de 2008). Estándar IEEE para aritmética de punto flotante. IEEE . doi :10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. IEEE Std 754-2008 . Consultado el 8 de febrero de 2016 .
  2. ^ "ISO/IEC/IEEE 60559:2011". 2011 . Consultado el 8 de febrero de 2016 .
  3. ^ 754-2019 - Estándar IEEE para aritmética de punto flotante (atención: muro de pago). 2019. doi :10.1109/IEEESTD.2019.8766229. ISBN 978-1-5044-5924-2. Recuperado el 24 de octubre de 2019 .
  4. ^ Cowlishaw, Michael Frederic (13 de febrero de 2007) [3 de octubre de 2000]. "Un resumen de la codificación decimal densamente empaquetada". IBM . Archivado desde el original el 24 de septiembre de 2015 . Consultado el 7 de febrero de 2016 .