Revisión IEEE 754-2008 - IEEE 754-2008 revision

IEEE 754-2008 (anteriormente conocido como IEEE 754r ) fue publicado en agosto de 2008 y es una revisión significativa, y sustituye, el IEEE 754-1985 en coma flotante estándar , mientras que en 2019 se actualiza con una revisión menor IEEE 754-2019 . La revisión de 2008 extendió el estándar anterior donde era necesario, agregó aritmética y formatos decimales, ajustó ciertas áreas del estándar original que se dejaron sin definir y se fusionó en IEEE 854 (el estándar de punto flotante independiente de la raíz).

En algunos casos, donde las definiciones más estrictas de aritmética de punto flotante binario podrían ser incompatibles con el rendimiento con alguna implementación existente, se hicieron opcionales.

Proceso de revisión

La norma ha estado en revisión desde 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 borrador de estándar
  2. Boleta: 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 para que el borrador siga adelante); Los comentarios de las votaciones son resueltos por un Comité de Resolución de Boletas (BRC) y los cambios realizados deben recircularse con una nueva boleta si son sustantivos
  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 resultar en 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 de IEEE (RevCom), y fue aprobado formalmente por el Consejo de Normas de IEEE-SA el 12 de junio de 2008. Fue publicado el 29 de agosto de 2008.

754r fase de grupo de trabajo

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

En ocasiones, los avances fueron lentos, lo que llevó al presidente a declarar en la reunión del 15 de septiembre de 2005 que "no se está avanzando, suspenderé estas reuniones hasta nuevo aviso por esos motivos". En diciembre de 2005, el comité se reorganizó bajo nuevas reglas con una fecha de finalización prevista para diciembre de 2006.

Se adoptaron nuevas políticas y procedimientos en febrero de 2006. En septiembre de 2006, se aprobó un borrador de trabajo para ser enviado al comité patrocinador de padres (el Comité de Estándares de Microprocesadores de IEEE, o MSC) para su edición y envío a la boleta de patrocinio.

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. 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 se llevó a cabo del 29 de noviembre de 2006 al 28 de diciembre de 2006. De los 84 miembros del cuerpo de votación, el 85,7% respondió; el 78,6% votó a favor. Hubo votos negativos (y más de 400 comentarios) por lo que hubo una votación de recirculación en marzo de 2007; esto recibió una aprobación del 84%. Hubo suficientes comentarios (más de 130) en esa votación de que se preparó un tercer borrador para la 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 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 boleta 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%, con comentarios que llevaron 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; el octavo (que no tenía comentarios dentro del alcance: 9 eran repeticiones de comentarios anteriores y uno se refería a material que no estaba en el borrador) se presentó al Comité de Revisión de Normas IEEE ('RevCom') para su aprobación como estándar IEEE.

754r Fase de revisión y aprobación

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

Publicación IEEE Std 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.

Este estándar reemplaza a IEEE 754-1985 . IEEE 854, el estándar de punto flotante independiente de Radix se retiró en diciembre de 2008.

Resumen de las revisiones

Las mejoras más obvias del estándar son la adición de un tipo binario de 16 y 128 bits y tres tipos decimales, algunas operaciones nuevas y muchas funciones recomendadas. Sin embargo, ha habido importantes aclaraciones en la terminología en todo momento. Este resumen destaca las principales diferencias en cada cláusula principal de la norma.

Cláusula 1: Resumen

El alcance (determinado por el patrocinador de la norma) se ha ampliado para incluir formatos decimales y aritméticos, y agrega formatos ampliables.

Cláusula 2: Definiciones

Muchas de las definiciones se han reescrito para mayor claridad y coherencia. Se ha cambiado el nombre 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 formatos se ha hecho más regular, con una distinción entre formatos aritméticos (en los que se puede realizar aritmética) y formatos de intercambio (que tienen una codificación estándar). La conformidad con la norma 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 recta 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-significando, etc.
  4. el patrón de bits (codificación) utilizado.

Los conjuntos de entidades representables se explican luego en detalle, mostrando que pueden tratarse con el significado considerado como una fracción o un número 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.

Los formatos de intercambio binario tienen la " precisión media " (formato de almacenamiento de 16 bits) y la " precisión cuádruple " (formato de 128 bits) agregadas, 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 dan formatos de intercambio decimal con significados de 7, 16 y 34 dígitos, que pueden estar normalizados o no normalizados. Para obtener el máximo rango y precisión, los formatos fusionan parte del exponente y el significado en un campo de combinación , y comprimen el resto del significado utilizando una codificación de entero decimal (que usa Densely Packed Decimal , o DPD, una forma comprimida de BCD ). o codificación de entero binario convencional . 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 ampliables permiten la aritmética en 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 las operaciones de punto flotante y (además de los atributos de redondeo requeridos) permite el manejo alternativo de excepciones, la ampliación de los resultados intermedios, las optimizaciones de cambio de valor y la reproducibilidad.

Se ha agregado el atributo redondeo al más cercano, empates alejados del redondeo cero (requerido solo 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 multiplicar-sumar fusionadas (FMA), conversiones explícitas, predicados de clasificación (isNan ( x ), etc.), varias funciones mínimas y máximas, un predicado de ordenación total y dos operaciones específicas de decimales (samequantum y quantize).

Min y max

Los min y max operaciones se definen pero dejan un cierto margen para el caso en que las entradas son iguales en valor, pero difieren en la representación. En particular:

  • min(+0,−0)o min(−0,+0)debe producir algo con un valor de cero pero siempre puede devolver el primer argumento.

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

  • min(x,qNaN) = min(qNaN,x) = x
  • max(x,qNaN) = max(qNaN,x) = x

Estas funciones se denominan minNum y maxNum para indicar su preferencia por un número sobre un NaN silencioso. Sin embargo, en presencia de una entrada de señalización NaN, se devuelve un NaN silencioso como ocurre con las operaciones habituales. Después de la publicación de la norma, se notó que estas reglas hacen que estas operaciones no sean asociativas; por esta razón, han sido reemplazados por nuevas operaciones en IEEE 754-2019 .

Aritmética decimal

En este apartado 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 (más de uno es posible en muchos casos).

Conversión de base correctamente redondeada

A diferencia de 854, 754-2008 requiere una conversión base correctamente redondeada entre decimal y coma flotante binaria 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 adiciones importantes. En particular, hace recomendaciones formales para la codificación del estado de señalización / silencio NaN .

Cláusula 7: manejo de excepciones predeterminado

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 de la Cláusula 8 anterior ('Trampas') para permitir el manejo de excepciones opcionales en varias formas, incluidas 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 las funciones de registro, potencia y trigonométricas, que los estándares del lenguaje deberían definir. Todos estos son opcionales (no se requiere ninguno 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 necesita hacer para lograr resultados reproducibles.

Anexo A: Bibliografía

Este anexo es nuevo; enumera algunas referencias útiles.

Anexo B: Soporte de depuración de programas

Este anexo es nuevo; proporciona orientación a los desarrolladores de depuradores para las funciones que se desean para admitir la depuración de código de punto flotante.

Índice de operaciones

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

Discutido pero no incluido

Debido a los cambios en el diseño y desarrollo de la CPU, el estándar de punto flotante IEEE de 2008 podría considerarse histórico o obsoleto como el estándar de 1985 al que reemplazó. Hubo muchas discusiones externas y elementos no cubiertos en el proceso de estandarización, los elementos a continuación son los que se hicieron de conocimiento público:

  • El anexo "L" recomendó a los desarrolladores de lenguajes cómo vincular elementos en el estándar a características en un lenguaje.
  • El anexo "U" proporcionó orientación sobre la elección de definiciones numéricas de subdesbordamiento.
En 754, la definición de subdesbordamiento era que el resultado es pequeño y se encuentra con una pérdida de precisión.
Se permitieron dos definiciones para la determinación de la condición 'diminuta': antes o después de redondear el resultado infinitamente preciso a la 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ó este último y se ha eliminado del estándar revisado 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 una causa de señal de subdesbordamiento.
  • El anexo "Z" introdujo tipos de datos opcionales para admitir otros formatos de punto flotante de ancho fijo, así como formatos de precisión arbitraria (es decir, donde la precisión de la representación y el redondeo se determina en el momento de la ejecución); parte de este material se trasladó a el cuerpo del borrador generalizando la sección 5. Se eliminó la precisión arbitraria.
  • Herencia y propagación de modos (manejo de excepciones, presustitución, redondeo) y banderas (inexacto, subdesbordamiento, desbordamiento, dividir por cero, inválido). El deseo es que las banderas se propaguen a una persona que llama; y los cambios de modo pueden ser heredados por una persona que llama, pero no afectan a la persona que llama.
  • El intervalo y otras aritméticas se discutieron pero no se incluyeron como fuera del alcance (y un gran trabajo por derecho propio). El trabajo está comenzando en 2008 en un estándar IEEE propuesto para aritmética de intervalos.

Referencias

enlaces externos