stringtranslate.com

Revisión de la norma IEEE 754-2008

IEEE 754-2008 (anteriormente conocido como IEEE 754r ) es una revisión del estándar IEEE 754 para aritmética de punto flotante . Fue publicado en agosto de 2008 y es una revisión significativa del estándar IEEE 754-1985 , que lo reemplaza . La revisión de 2008 amplió el estándar anterior donde era necesario, agregó aritmética decimal y formatos, reforzó ciertas áreas del estándar original que quedaron sin definir y se fusionó en IEEE 854 (el estándar de punto flotante independiente de la base). En algunos casos, donde las definiciones más estrictas de la aritmética binaria de punto flotante podrían ser incompatibles con el rendimiento de alguna implementación existente, se hicieron opcionales. En 2019, se actualizó con una revisión menor IEEE 754-2019 . [1]

Proceso de revisión

La norma ha estado bajo revisión desde el año 2000, con una fecha de finalización prevista para diciembre de 2006. La revisión de una norma IEEE sigue en líneas generales tres fases:

  1. Grupo de trabajo: un comité que crea un proyecto de norma
  2. Votación: las partes interesadas se suscriben al grupo de votación y votan sobre el borrador (el 75 % del grupo debe participar y el 75 % debe aprobar el borrador para que siga adelante); los comentarios de las votaciones son resueltos por un Comité de Resolución de Votación (BRC) y los cambios realizados deben volver a circular con una nueva votación si son sustanciales.
  3. Cuando se resuelven todos los comentarios y no hay más cambios, el borrador se envía al IEEE para su revisión, aprobación y publicación (esto también puede dar lugar a cambios y votaciones, aunque esto es poco común).

El 11 de junio de 2008, fue aprobado por unanimidad por el Comité de Revisión del IEEE (RevCom), y fue aprobado formalmente por el Consejo de Normas IEEE-SA el 12 de junio de 2008. Se publicó el 29 de agosto de 2008.

Fase del grupo de trabajo 754r

La participación en la redacción del estándar estuvo abierta a personas con sólidos conocimientos de aritmética de coma flotante. Más de 90 personas asistieron al menos a una de las reuniones mensuales, que se celebraron en Silicon Valley , y muchas más participaron a través de la lista de correo.

En ocasiones los avances fueron lentos, por lo que el presidente declaró en la reunión del 15 de septiembre de 2005 [2] que "no se estaban logrando avances y suspendo estas reuniones hasta nuevo aviso por esos motivos". En diciembre de 2005, el comité se reorganizó de acuerdo con nuevas reglas y fijó como fecha de finalización diciembre de 2006.

En febrero de 2006 se adoptaron nuevas políticas y procedimientos. En septiembre de 2006, se aprobó un borrador de trabajo para enviarlo al comité patrocinador principal (el Comité de Normas de Microprocesadores IEEE o MSC) para su edición y envío a votación de patrocinadores.

754r Fase de votación

La última versión del borrador, la versión 1.2.5, presentada al MSC fue del 4 de octubre de 2006. [3] El MSC aceptó el borrador el 9 de octubre de 2006. El borrador ha sido modificado significativamente en detalle durante el proceso de votación.

La primera votación de los patrocinadores tuvo lugar del 29 de noviembre al 28 de diciembre de 2006. De los 84 miembros del cuerpo de votación, el 85,7% respondió, y el 78,6% votó a favor. Hubo votos negativos (y más de 400 comentarios), por lo que se realizó una votación de recirculación en marzo de 2007; esta recibió una aprobación del 84%. Hubo suficientes comentarios (más de 130) de esa votación como para preparar un tercer borrador para una segunda votación de recirculación de 15 días que comenzó a mediados de abril de 2007. Por una razón técnica, el proceso de votación se reinició con la cuarta votación en octubre de 2007; también hubo cambios sustanciales en el borrador como resultado de los comentarios de 650 votantes y de las solicitudes del patrocinador (el IEEE MSC); esta votación simplemente no logró alcanzar la aprobación requerida del 75%. La quinta votación tuvo una tasa de respuesta del 98,0% con una aprobación del 91,0%, y los comentarios dieron lugar a cambios relativamente pequeños. Las votaciones 6.ª, 7.ª y 8.ª mantuvieron índices de aprobación de más del 90% con progresivamente menos comentarios sobre cada borrador; la 8.ª (que no tuvo comentarios dentro del alcance: 9 fueron repeticiones de comentarios anteriores y uno se refería a material que no estaba en el borrador) se envió al Comité de Revisión de Normas IEEE ('RevCom') para su aprobación como norma IEEE.

754r Fase de revisión y aprobación

El Comité de Revisión de Normas IEEE (RevCom) consideró y aprobó por unanimidad el borrador IEEE 754r en su reunión de junio de 2008, y fue aprobado por el Consejo de Normas IEEE-SA el 12 de junio de 2008. La edición final está completa y el documento ahora ha sido enviado al Departamento de Publicaciones de Normas IEEE para su publicación.

Publicación de la norma IEEE 754-2008

El nuevo IEEE 754 (formalmente IEEE Std 754-2008, el estándar IEEE para aritmética de punto flotante) fue publicado por la IEEE Computer Society el 29 de agosto de 2008 y está disponible en el sitio web IEEE Xplore [4].

Esta norma reemplaza a IEEE 754-1985 . IEEE 854, el estándar de punto flotante independiente de la base, fue retirado en diciembre de 2008.

Resumen de las revisiones

Las mejoras más obvias del estándar son la incorporación de un tipo binario de 16 bits y otro de 128 bits y tres tipos decimales, algunas operaciones nuevas y muchas funciones recomendadas. Sin embargo, se han hecho aclaraciones importantes en la terminología a lo largo de todo el texto. Este resumen destaca las principales diferencias en cada cláusula principal del estándar.

Cláusula 1: Descripción general

El alcance (determinado por el patrocinador del estándar) se ha ampliado para incluir formatos decimales y aritméticos, y agrega formatos extensibles.

Cláusula 2: Definiciones

Muchas de las definiciones se han reescrito para mayor claridad y coherencia. Se han cambiado los nombres de algunos términos para mayor claridad (por ejemplo, se ha cambiado el nombre de desnormalizado a subnormal ).

Cláusula 3: Formatos

La descripción de los formatos se ha vuelto más regular, distinguiendo entre formatos aritméticos (en los que se pueden realizar operaciones aritméticas) y formatos de intercambio (que tienen una codificación estándar). La conformidad con el estándar se define ahora en estos términos.

Se han enumerado los niveles de especificación de un formato de punto flotante para aclarar la distinción entre:

  1. los números reales teóricos (una línea numérica extendida)
  2. las entidades que se pueden representar en el formato (un conjunto finito de números, junto con −0 , infinitos y NaN )
  3. las representaciones particulares de las entidades: signo-exponente-significado, etc.
  4. el patrón de bits (codificación) utilizado.

A continuación se explican en detalle los conjuntos de entidades representables, mostrando que pueden tratarse considerando el mantis como una fracción o como un entero. Se definen los conjuntos particulares conocidos como formatos básicos y se explican las codificaciones utilizadas para el intercambio de formatos binarios y decimales.

A los formatos de intercambio binario se les agregan " media precisión " (formato de almacenamiento de 16 bits) y " cuádruple precisión " (formato de 128 bits), junto con fórmulas generalizadas para algunos formatos más amplios; los formatos básicos tienen codificaciones de 32 bits, 64 bits y 128 bits.

Se describen tres nuevos formatos decimales que coinciden con las longitudes de los formatos binarios de 32 a 128 bits. Estos proporcionan formatos de intercambio decimal con mantisas de 7, 16 y 34 dígitos, que pueden estar normalizadas o no normalizadas. Para lograr el máximo rango y precisión, los formatos fusionan parte del exponente y la mantisa en un campo de combinación y comprimen el resto de la mantisa utilizando una codificación de enteros decimales (que utiliza Densely Packed Decimal o DPD, una forma comprimida de BCD ) o una codificación de enteros binarios convencionales . Los formatos básicos son los dos tamaños más grandes, que tienen codificaciones de 64 y 128 bits. También se especifican fórmulas generalizadas para algunos otros formatos de intercambio.

Los formatos extendidos y extensibles permiten realizar operaciones aritméticas con otras precisiones y rangos.

Cláusula 4: Atributos y redondeo

Esta cláusula se ha modificado para fomentar el uso de atributos estáticos para controlar operaciones de punto flotante y (además de los atributos de redondeo requeridos) permitir el manejo alternativo de excepciones, la ampliación de resultados intermedios, optimizaciones de cambio de valor y reproducibilidad.

Se ha agregado el atributo de redondeo al más cercano, sin empates desde cero (requerido únicamente para operaciones decimales).

Cláusula 5: Operaciones

Esta sección tiene numerosas aclaraciones (especialmente en el área de comparaciones) y ahora se requieren varias operaciones recomendadas anteriormente (como copiar, negar, abs y clase).

Las nuevas operaciones incluyen multiplicación-suma fusionada (FMA), conversiones explícitas, predicados de clasificación (isNan( x ), etc.), varias funciones mínimas y máximas, un predicado de ordenamiento total y dos operaciones específicas decimales (samequantum y quantize).

Mínimo y máximo

Las operaciones min y max están definidas, pero dejan cierto margen de maniobra para el caso en que las entradas sean iguales en valor pero difieran en representación. En particular:

Para admitir operaciones como el uso de ventanas en las que una entrada NaN debe reemplazarse silenciosamente con uno de los puntos finales, se definen min y max para seleccionar un número, x , en lugar de un NaN silencioso:

Estas funciones se denominan minNum y maxNum para indicar su preferencia por un número en lugar de un NaN silencioso. Sin embargo, en presencia de una entrada de señalización NaN, se devuelve un NaN silencioso como con las operaciones habituales. Después de la publicación del estándar, se observó que estas reglas hacen que estas operaciones no sean asociativas; por este motivo, se han reemplazado por nuevas operaciones en IEEE 754-2019 .

Aritmética decimal

En esta sección también se define la aritmética decimal, compatible con la utilizada en Java , C# , PL/I , COBOL , Python , REXX , etc. En general, la aritmética decimal sigue las mismas reglas que la aritmética binaria (los resultados se redondean correctamente, etc.), con reglas adicionales que definen el exponente de un resultado (en muchos casos es posible más de uno).

Conversión de base redondeada correctamente

A diferencia de 854, 754-2008 requiere una conversión de base correctamente redondeada entre punto flotante decimal y binario dentro de un rango que depende del formato.

Cláusula 6: Infinito, NaN y bit de signo

Esta cláusula ha sido revisada y aclarada, pero sin agregados importantes. En particular, hace recomendaciones formales para la codificación del estado NaN de señalización/silencio .

Cláusula 7: Manejo de excepciones por defecto

Esta cláusula ha sido revisada y aclarada considerablemente, pero sin adiciones importantes.

Cláusula 8: Manejo alternativo de excepciones

Esta cláusula se ha ampliado a partir de la cláusula 8 anterior ('Trampas') para permitir el manejo opcional de excepciones en varias formas, incluidas las trampas y otros modelos como try/catch. Las trampas y otros mecanismos de excepción siguen siendo opcionales, como lo eran en IEEE 754-1985.

Cláusula 9: Operaciones recomendadas

Esta cláusula es nueva; recomienda cincuenta operaciones, incluidas funciones logarítmicas, de potencia y trigonométricas, que los estándares del lenguaje deberían definir. Todas ellas son opcionales (no se requiere ninguna para cumplir con el estándar). Las operaciones incluyen algunas sobre modos dinámicos para atributos y también un conjunto de operaciones de reducción (suma, producto escalado, etc.).

Cláusula 10: Evaluación de expresiones

Esta cláusula es nueva; recomienda cómo los estándares del lenguaje deben especificar la semántica de las secuencias de operaciones y señala las sutilezas de los significados literales y las optimizaciones que cambian el valor de un resultado.

Cláusula 11: Reproducibilidad

Esta cláusula es nueva; recomienda que los estándares de lenguaje proporcionen un medio para escribir programas reproducibles (es decir, programas que producirán el mismo resultado en todas las implementaciones de un lenguaje) y describe lo que se debe hacer para lograr resultados reproducibles.

Anexo A: Bibliografía

Este anexo es nuevo; enumera algunas referencias útiles.

Anexo B: Soporte para la depuración de programas

Este anexo es nuevo; proporciona orientación a los desarrolladores de depuradores sobre las características que se desean para respaldar la depuración de código de punto flotante.

Indice de operaciones

Este es un nuevo índice, que enumera todas las operaciones descritas en el estándar (obligatorias u opcionales).

Discutido pero no incluido

Debido a los cambios en el diseño y desarrollo de las CPU, el estándar de punto flotante IEEE de 2008 podría considerarse histórico o desactualizado, al igual que el estándar de 1985 al que reemplazó. Hubo muchas discusiones externas y temas que no se abordaron en el proceso de estandarización; los siguientes son los que se hicieron públicos:

En 754 la definición de subdesbordamiento era que el resultado es minúsculo y presenta una pérdida de precisión.
Se permitieron dos definiciones para la determinación de la condición 'pequeña': antes o después de redondear el resultado infinitamente preciso a precisión de trabajo, con exponente ilimitado.
Se permitieron dos definiciones de pérdida de precisión: resultado inexacto o pérdida debida únicamente a la desnormalización. Ningún sistema de hardware conocido implementó esta última y se ha eliminado de la norma revisada como una opción.
El Anexo U de 754r recomendó que solo la pequeñez después del redondeo y la inexactitud como pérdida de precisión sean causa de señal de subdesbordamiento.

Referencias

  1. ^ "ANSI/IEEE Std 754-2019". 754r.ucbtest.org . Consultado el 6 de agosto de 2019 .
  2. ^ "Reunión del 15 de septiembre de 2005".[ enlace muerto ]
  3. ^ BORRADOR de la norma para aritmética de coma flotante P754, versión 1.2.5. Revisión de la norma ANSI/IEEE 754-1985 (informe). 4 de octubre de 2006.
  4. ^ 754-2008 - Estándar IEEE para aritmética de punto flotante . IEEE . 29 de agosto de 2008. doi :10.1109/IEEESTD.2008.4610935. ISBN . 978-0-7381-5752-8.(NB. Reemplazado por IEEE Std 754-2019, una revisión de IEEE 754-2008).

Enlaces externos