De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

El estándar IEEE para aritmética de punto flotante ( IEEE 754 ) es un estándar técnico para aritmética de punto flotante establecido en 1985 por el Instituto de ingenieros eléctricos y electrónicos (IEEE). El estándar abordó muchos problemas encontrados en las diversas implementaciones de punto flotante que los hacían difíciles de usar de manera confiable y portátil . Muchas unidades de hardware de punto flotante utilizan el estándar IEEE 754.

El estándar define:

  • Formatos aritméticos: conjuntos de datos de coma flotante binarios y decimales , que constan de números finitos (incluidos ceros con signo y números subnormales ), infinitos y valores especiales "no es un número" ( NaN ).
  • formatos de intercambio: codificaciones (cadenas de bits) que se pueden utilizar para intercambiar datos de punto flotante de forma eficiente y compacta
  • reglas de redondeo: propiedades que deben cumplirse al redondear números durante la aritmética y las conversiones
  • operaciones: operaciones aritméticas y otras (como funciones trigonométricas ) en formatos aritméticos
  • manejo de excepciones: indicaciones de condiciones excepcionales (como división por cero , desbordamiento, etc. )

IEEE 754-2008 , publicado en agosto de 2008, incluye casi todo el estándar IEEE 754-1985 original , más el estándar IEEE 854-1987 para aritmética de coma flotante independiente de radix . La versión actual, IEEE 754-2019, se publicó en julio de 2019. [1] Es una revisión menor de la versión anterior, que incorpora principalmente aclaraciones, corrección de defectos y nuevas operaciones recomendadas.

Desarrollo estándar [ editar ]

El primer estándar para la aritmética de coma flotante, IEEE 754-1985 , se publicó en 1985. Cubría sólo la aritmética de coma flotante binaria.

En agosto de 2008 se publicó una nueva versión, IEEE 754-2008 , tras un proceso de revisión de siete años, presidido por Dan Zuras y editado por Mike Cowlishaw . Reemplazó tanto a IEEE 754-1985 (aritmética de coma flotante binaria) como a la norma IEEE 854-1987 para aritmética de coma flotante independiente de radix . Los formatos binarios del estándar original se incluyen en este nuevo estándar junto con tres nuevos formatos básicos, uno binario y dos decimales. Para ajustarse al estándar actual, una implementación debe implementar al menos uno de los formatos básicos como formato aritmético y formato de intercambio.

La norma internacional ISO / IEC / IEEE 60559: 2011 (con contenido idéntico a IEEE 754-2008) ha sido aprobada para su adopción a través de JTC1 / SC 25 bajo el Acuerdo ISO / IEEE PSDO [2] y publicada. [3]

La versión actual, IEEE 754-2019 publicada en julio de 2019, se deriva y reemplaza a IEEE 754-2008, luego de un proceso de revisión iniciado en septiembre de 2015, presidido por David G. Hough y editado por Mike Cowlishaw. Incorpora principalmente aclaraciones (por ejemplo, totalOrder ) y corrección de defectos (por ejemplo, minNum ), pero también incluye algunas nuevas operaciones recomendadas (por ejemplo, augmentedAddition ). [4] [5]

La norma internacional ISO / IEC 60559: 2020 (con contenido idéntico a IEEE 754-2019) ha sido aprobada para su adopción a través de JTC1 / SC 25 y publicada. [6]

Formatos [ editar ]

Un formato IEEE 754 es un "conjunto de representaciones de valores numéricos y símbolos". Un formato también puede incluir cómo se codifica el conjunto. [7]

Un formato de punto flotante se especifica mediante:

  • una base (también llamada raíz ) b , que es 2 (binario) o 10 (decimal) en IEEE 754;
  • una precisión p ;
  • una gama exponente de Emin a Emax , con emin = 1 - Emax para todos los formatos IEEE 754.

Un formato comprende:

  • Números finitos, que pueden describirse mediante tres enteros: s  = un signo (cero o uno), c  = un significando (o coeficiente ) que no tiene más de p dígitos cuando se escribe en base b (es decir, un número entero en el rango hasta 0 a b p  - 1), y q  = un exponente de tal manera que eminq  +  p  - 1 ≤ Emax . El valor numérico de tal número finito es (−1) s × c × b q . [a]Además, hay dos valores cero, llamados ceros con signo: el bit de signo especifica si un cero es +0 (cero positivo) o −0 (cero negativo).
  • Dos infinitos: + ∞ y −∞.
  • Dos tipos de NaN (no un número): un NaN silencioso (qNaN) y un NaN de señalización (sNaN).

Por ejemplo, si b = 10, p = 7 y emax = 96, entonces emin = −95, el significando satisface 0 ≤ c9 999 999 , y la satisface exponente -101 ≤ q ≤ 90. En consecuencia, la no-cero número positivo más pequeño que se puede representar es 1 × 10 -101 , y el más grande es 9.999.999 × 10 90 (9,999999 × 10 96 ), por lo que el rango completo de números es de -9.999999 × 10 96 a 9.999999 × 10 96 . Los números - b 1- Emax y b 1- Emax (aquí, -1 × 10 -95 y 1 × 10 -95 ) son los más pequeños (en magnitud) números normales ; Los números distintos de cero entre estos números más pequeños se denominan números subnormales..

Representación y codificación en memoria [ editar ]

Algunos números pueden tener varias representaciones de formato exponencial posibles. Por ejemplo, si b  = 10 y p  = 7, entonces −12,345 se puede representar por −12345 × 10 −3 , −123450 × 10 −4 y −1234500 × 10 −5 . Sin embargo, para la mayoría de las operaciones, como las operaciones aritméticas, el resultado (valor) no depende de la representación de las entradas.

Para los formatos decimales, cualquier representación es válida y el conjunto de estas representaciones se denomina cohorte . Cuando un resultado puede tener varias representaciones, el estándar especifica qué miembro de la cohorte se elige.

Para los formatos binarios, la representación se hace única eligiendo el exponente representable más pequeño que permite que el valor se represente exactamente. Además, el exponente no se representa directamente, pero se agrega un sesgo para que el exponente representable más pequeño se represente como 1, con 0 utilizado para números subnormales. Para números con un exponente en el rango normal (el campo del exponente no es ni todos unos ni todos ceros), el bit inicial del significando siempre será 1. En consecuencia, un 1 inicial puede estar implícito en lugar de estar presente explícitamente en la codificación de memoria, y bajo la norma de la parte representada de forma explícita de la mantisa estará entre 0 y 1. Esta regla se llama líder convención bits , convenciones poco implícita o convención poco escondido. Esta regla permite que el formato binario tenga un poco más de precisión. La convención de bits iniciales no se puede utilizar para los números subnormales ya que tienen un exponente fuera del rango de exponentes normales y escalan por el exponente representado más pequeño como se usa para los números normales más pequeños.

Debido a la posibilidad de múltiples codificaciones (al menos en formatos llamados formatos de intercambio ), un NaN puede llevar otra información: un bit de signo (que no tiene significado, pero puede ser usado por algunas operaciones) y una carga útil , que está destinada a diagnósticos. información que indica la fuente del NaN (pero la carga útil puede tener otros usos, como el encajonamiento de NaN [8] [9] [10] ).

Formatos básicos y de intercambio [ editar ]

El estándar define cinco formatos básicos que se nombran por su base numérica y el número de bits utilizados en su codificación de intercambio. Hay tres formatos básicos de coma flotante binaria (codificados con 32, 64 o 128 bits) y dos formatos básicos de coma flotante decimal (codificados con 64 o 128 bits). Los formatos binary32 y binary64 son los formatos simple y doble de IEEE 754-1985 respectivamente. Una implementación conforme debe implementar completamente al menos uno de los formatos básicos.

El estándar también define formatos de intercambio , que generalizan estos formatos básicos. [11] Para los formatos binarios, se requiere la convención de bits iniciales. La siguiente tabla resume los formatos de intercambio más pequeños (incluidos los básicos).

Tenga en cuenta que en la tabla anterior, los exponentes mínimos enumerados son para números normales; la representación de números subnormales especiales permite representar números aún más pequeños (con cierta pérdida de precisión). Por ejemplo, el número positivo más pequeño que se puede representar en binary64 es 2 −1074 ; Las contribuciones a la cifra −1074 incluyen el valor mínimo de E −1022 y todos menos uno de los 53 bits significativos (2 −1022 - (53-1)  = 2 −1074 ).

Los dígitos decimales son dígitos × log 10 base . Esto da una precisión aproximada en el número de dígitos decimales.

E max decimal es Emax × log 10 base . Esto da un valor aproximado del máximo exponente decimal.

Los formatos binary32 (simple) y binary64 (doble) son dos de los formatos más comunes que se utilizan en la actualidad. La siguiente figura muestra la precisión absoluta para ambos formatos en un rango de valores. Esta cifra se puede utilizar para seleccionar un formato apropiado dado el valor esperado de un número y la precisión requerida.

La precisión de binary32 y binary64 en el rango de 10 -12 a 10 12


Un ejemplo de diseño para coma flotante de 32 bits es

y el diseño de 64 bits es similar .

Formatos de precisión extendidos y ampliables [ editar ]

El estándar especifica formatos de precisión extendidos y ampliables opcionales , que brindan mayor precisión que los formatos básicos. [13] Un formato de precisión extendido amplía un formato básico utilizando más precisión y más rango de exponentes. Un formato de precisión extensible permite al usuario especificar la precisión y el rango de exponentes. Una implementación puede usar cualquier representación interna que elija para tales formatos; todo lo que necesita ser definido son sus parámetros ( b , p y emax ). Estos parámetros describen de forma única el conjunto de números finitos (combinaciones de signo, significado y exponente para la base dada) que puede representar.

La norma recomienda que las normas de lenguaje proporcionan un método de especificar p y Emax para cada base soportado b . [14] El estándar recomienda que los estándares e implementaciones del lenguaje admitan un formato extendido que tiene una precisión mayor que el formato básico más grande admitido para cada base b . [15] Para un formato extendido con una precisión entre dos formatos básicos, el rango de exponentes debe ser tan grande como el del siguiente formato básico más amplio. Entonces, por ejemplo, un número binario de precisión extendido de 64 bits debe tener un 'emax' de al menos 16383. El formato extendido x87 de 80 bits cumple con este requisito.

Formatos de intercambio [ editar ]

Los formatos de intercambio están pensados ​​para el intercambio de datos en coma flotante utilizando una cadena de bits de longitud fija para un formato dado.

Binario [ editar ]

Para el intercambio de números binarios de coma flotante, se definen formatos de intercambio de 16 bits, 32 bits, 64 bits y cualquier múltiplo de 32 bits ≥ 128 [c] . El formato de 16 bits está destinado al intercambio o almacenamiento de números pequeños (por ejemplo, para gráficos).

El esquema de codificación para estos formatos de intercambio binario es el mismo que el de IEEE 754-1985: un bit de signo, seguido de w bits de exponente que describen el desplazamiento del exponente por un sesgo , y p  - 1 bits que describen el significado. El ancho del campo exponente para un formato de k bits se calcula como w  = round (4 log 2 ( k )) - 13. Los formatos existentes de 64 y 128 bits siguen esta regla, pero los de 16 y 32 bits Los formatos tienen más bits de exponente (5 y 8 respectivamente) de los que proporcionaría esta fórmula (3 y 7 respectivamente).

Al igual que con IEEE 754-1985, el campo de exponente sesgado se rellena con todos los bits 1 para indicar infinito (campo de significación final = 0) o un NaN (campo de significación final ≠ 0). Para los NaN, los NaN silenciosos y los NaN de señalización se distinguen utilizando exclusivamente el bit más significativo del campo de significación final, [d] y la carga útil se transporta en los bits restantes.

Decimal [ editar ]

Para el intercambio de números decimales de coma flotante, se definen formatos de intercambio de cualquier múltiplo de 32 bits. Al igual que con el intercambio binario, el esquema de codificación para los formatos de intercambio decimal codifica el signo, exponente y significado. Se definen dos codificaciones de nivel de bits diferentes y el intercambio se complica por el hecho de que puede ser necesario algún indicador externo de la codificación en uso.

Las dos opciones permiten codificar el significado como una secuencia comprimida de dígitos decimales utilizando decimal densamente empaquetado o, alternativamente, como un entero binario . El primero es más conveniente para la implementación directa de hardware del estándar, mientras que el segundo es más adecuado para la emulación de software en una computadora binaria. En cualquier caso, el conjunto de números (combinaciones de signo, significado y exponente) que pueden codificarse es idéntico, y los valores especiales (± cero con el exponente mínimo, ± infinito, NaN silenciosos y NaN de señalización) tienen codificaciones idénticas.

Reglas de redondeo [ editar ]

El estándar define cinco reglas de redondeo. Las dos primeras reglas se redondean al valor más cercano; los otros se denominan redondeos dirigidos :

Redondeos al más cercano [ editar ]

  • Redondea al valor más cercano, empata a pares  - redondea al valor más cercano; si el número cae a la mitad, se redondea al valor más cercano con un dígito incluso menos significativo; este es el valor predeterminado para el punto flotante binario y el valor predeterminado recomendado para el decimal.
  • Redondea al valor más cercano, empates desde cero  - redondea al valor más cercano; si el número cae a la mitad, se redondea al valor más cercano por encima (para números positivos) o por debajo (para números negativos); esto está pensado como una opción para coma flotante decimal.

Redondeos dirigidos [ editar ]

  • Redondear hacia 0  : redondeo dirigido hacia cero (también conocido como truncamiento ).
  • Redondear hacia + ∞  : redondeo dirigido hacia el infinito positivo (también conocido como redondeo hacia arriba o techo ).
  • Redondear hacia −∞  : redondeo dirigido hacia el infinito negativo (también conocido como redondeo hacia abajo o piso ).

A menos que se especifique lo contrario, el resultado de coma flotante de una operación se determina aplicando la función de redondeo al resultado infinitamente preciso (matemático). Se dice que una operación de este tipo está correctamente redondeada . Este requisito se denomina redondeo correcto . [dieciséis]

Operaciones necesarias [ editar ]

Las operaciones necesarias para un formato aritmético compatible (incluidos los formatos básicos) incluyen:

  • Operaciones aritméticas (sumar, restar, multiplicar, dividir, raíz cuadrada, multiplicar-sumar fusionados , resto) [17] [18]
  • Conversiones (entre formatos, hacia y desde cadenas, etc. ) [19] [20]
  • Escalado y cuantificación (para decimal) [21] [22]
  • Copiar y manipular el signo (abs, negar, etc. ) [23]
  • Comparaciones y pedidos totales [24] [25]
  • Clasificación y pruebas de NaN, etc. [26]
  • Prueba y configuración de banderas [27]
  • Operaciones misceláneas. [ especificar ]

Predicados de comparación [ editar ]

El estándar proporciona predicados de comparación para comparar un dato de punto flotante con otro en el formato aritmético admitido. [28] Cualquier comparación con un NaN se considera desordenada. −0 y +0 se comparan como iguales.

Predicado de orden total [ editar ]

El estándar proporciona un predicado totalOrder , que define un orden total en miembros canónicos del formato aritmético admitido. [29] El predicado concuerda con los predicados de comparación cuando un número de punto flotante es menor que el otro. El predicado totalOrder no impone un orden total en todas las codificaciones en un formato. En particular, no distingue entre diferentes codificaciones de la misma representación de punto flotante, como cuando una o ambas codificaciones no son canónicas. [30] IEEE 754-2019 incorpora aclaraciones de totalOrder .

Manejo de excepciones [ editar ]

El estándar define cinco excepciones, cada una de las cuales devuelve un valor predeterminado y tiene un indicador de estado correspondiente que se activa cuando ocurre la excepción. [e] No se requiere ningún otro manejo de excepciones, pero se recomiendan alternativas adicionales no predeterminadas (ver § Manejo alternativo de excepciones ).

Las cinco posibles excepciones son:

  • Operación no válida: matemáticamente indefinida, por ejemplo , la raíz cuadrada de un número negativo. De forma predeterminada, devuelve qNaN.
  • División por cero: una operación sobre operandos finitos da un resultado infinito exacto, por ejemplo , 1/0 o log (0). De forma predeterminada, devuelve ± infinito.
  • Desbordamiento: un resultado es demasiado grande para ser representado correctamente ( es decir , su exponente con un rango de exponentes ilimitado sería mayor que emax ). De forma predeterminada, devuelve ± infinito para los modos de redondeo al más cercano (y sigue las reglas de redondeo para los modos de redondeo dirigido).
  • Rebase por defecto: el resultado es muy pequeño (fuera del rango normal) y es inexacto. De forma predeterminada, devuelve un valor subnormal o cero (siguiendo las reglas de redondeo).
  • Inexacto: el resultado exacto ( es decir , sin redondear) no se puede representar con exactitud. De forma predeterminada, devuelve el resultado correctamente redondeado.

Estas son las mismas cinco excepciones que se definieron en IEEE 754-1985, pero la excepción de división por cero se ha extendido a operaciones distintas de la división.

Para el punto flotante decimal, existen excepciones adicionales: [31] [32]

  • Fijado: el exponente de un resultado es demasiado grande para el formato de destino. De forma predeterminada, los ceros finales se agregarán al coeficiente para reducir el exponente al mayor valor utilizable. Si esto no es posible (porque esto haría que la cantidad de dígitos necesarios sea mayor que el formato de destino), se produce una excepción de desbordamiento.
  • Redondeado: el coeficiente de un resultado requiere más dígitos de los que proporciona el formato de destino. Se señala una excepción inexacta si se descartan dígitos distintos de cero.

Además, operaciones como cuantificar cuando cualquiera de los operandos es infinito, o cuando el resultado no se ajusta al formato de destino, también señalarán una excepción de operación no válida. [33]

Recomendaciones [ editar ]

Manejo alternativo de excepciones [ editar ]

El estándar recomienda el manejo de excepciones opcional en varias formas, incluida la sustitución previa de valores predeterminados definidos por el usuario y trampas (excepciones que cambian el flujo de control de alguna manera) y otros modelos de manejo de excepciones que interrumpen el flujo, como try / catch. Las trampas y otros mecanismos de excepción siguen siendo opcionales, como lo eran en IEEE 754-1985.

Operaciones recomendadas [ editar ]

La cláusula 9 de la norma recomienda operaciones matemáticas adicionales [34] que las normas lingüísticas deberían definir. [35] No se requiere ninguno para cumplir con la norma.

Operaciones aritméticas recomendadas, que deben redondearse correctamente: [36]

  • mi X {\ Displaystyle e ^ {x}} , ,
  • mi X - 1 {\ Displaystyle e ^ {x} -1} , ,
  • en ⁡ X {\ Displaystyle \ ln x} , , Iniciar sesión 2 ⁡ X {\ Displaystyle \ log _ {2} x} Iniciar sesión 10 ⁡ X {\ Displaystyle \ log _ {10} x}
  • en ⁡ ( 1 + X ) {\ Displaystyle \ ln (1 + x)} , ,
  • X 2 + y 2 {\ Displaystyle {\ sqrt {x ^ {2} + y ^ {2}}}}
  • X {\ Displaystyle {\ sqrt {x}}}
  • X 1 norte {\ Displaystyle x ^ {\ frac {1} {n}}}
  • X norte {\ Displaystyle x ^ {n}} , X y {\ Displaystyle x ^ {y}}
  • pecado ⁡ X {\ Displaystyle \ sin x} , , porque ⁡ X {\ Displaystyle \ cos x} broncearse ⁡ X {\ Displaystyle \ tan x}
  • arcos ⁡ X {\ Displaystyle \ arcsin x} , , , arccos ⁡ X {\ Displaystyle \ arccos x} arctan ⁡ X {\ Displaystyle \ arctan x} atan2 ⁡ ( y , X ) {\ Displaystyle \ operatorname {atan2} (y, x)}
  • , , (Véase también: Los múltiplos de π )
  • , , , (Véase también: Los múltiplos de π )
  • sinh ⁡ x {\displaystyle \sinh x} , , cosh ⁡ x {\displaystyle \cosh x} tanh ⁡ x {\displaystyle \tanh x}
  • arsinh ⁡ x {\displaystyle \operatorname {arsinh} x} , , arcosh ⁡ x {\displaystyle \operatorname {arcosh} x} artanh ⁡ x {\displaystyle \operatorname {artanh} x}

Las funciones asinPi , acosPi y tanPi no formaban parte del estándar IEEE 754-2008 porque se consideraron menos necesarias. [37] Se mencionaron asinPi , acosPi , pero esto se consideró un error. [4] Los tres se agregaron en la revisión de 2019.

Las operaciones recomendados incluyen también el establecimiento y el acceso a modo de redondeo dirección dinámica, [38] y las operaciones de reducción de vector definido por la implementación tales como suma, producto reducido, y dot producto , cuya precisión es especificada por la norma. [39]

A partir de 2019 , también se recomiendan operaciones aritméticas aumentadas [40] para los formatos binarios. Estas operaciones, especificadas para suma, resta y multiplicación, producen un par de valores que consta de un resultado correctamente redondeado al más cercano en el formato y el término de error, que es representable exactamente en el formato. En el momento de la publicación del estándar, no se conocen implementaciones de hardware, pero ya se implementaron operaciones muy similares en software utilizando algoritmos bien conocidos. La historia y la motivación para su estandarización se explican en un documento de antecedentes. [41] [42]

A partir de 2019, los antes requeridos minNum, maxNum, minNumMag y maxNumMag en IEEE 754-2008 ahora se eliminan debido a su no asociatividad. En su lugar, se recomiendan dos conjuntos de nuevas operaciones mínimas y máximas [43] . El primer conjunto contiene el número mínimo, mínimo, máximo y máximo . El segundo conjunto contiene la magnitud mínima, la magnitud mínima, la magnitud máxima y la magnitud máxima . La historia y la motivación de este cambio se explican en un documento de antecedentes. [44]

Evaluación de expresiones [ editar ]

El estándar 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. Por el contrario, la versión anterior de 1985 del estándar dejaba sin especificar aspectos de la interfaz del lenguaje, lo que conducía a un comportamiento inconsistente entre compiladores o diferentes niveles de optimización en un solo compilador.

Los lenguajes de programación deberían permitir al usuario especificar una precisión mínima para cálculos intermedios de expresiones para cada base. En el estándar, esto se denomina "ancho preferido", y debería ser posible configurarlo por bloque. Deben calcularse los cálculos intermedios dentro de las expresiones y guardarse los temporales, utilizando el ancho máximo de los operandos y el ancho preferido, si se establece. Así, por ejemplo, un compilador que tenga como objetivo hardware de punto flotante x87 debería tener un medio para especificar que los cálculos intermedios deben utilizar el formato de doble extensión . El valor almacenado de una variable siempre debe usarse al evaluar expresiones posteriores, en lugar de cualquier precursor antes de redondear y asignar a la variable.

Reproducibilidad [ editar ]

El IEEE 754-1985 permitió muchas variaciones en las implementaciones (como la codificación de algunos valores y la detección de ciertas excepciones). IEEE 754-2008 ha reforzado muchos de estos, pero aún quedan algunas variaciones (especialmente para formatos binarios). La cláusula de reproducibilidad 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.

Representación de personajes [ editar ]

El estándar requiere operaciones para convertir entre formatos básicos y formatos de secuencia de caracteres externos . [45] Se requieren conversiones hacia y desde un formato de carácter decimal para todos los formatos. La conversión a una secuencia de caracteres externos debe ser tal que la conversión utilizando el redondeo a pares recupere el número original. No es necesario preservar la carga útil de un NaN silencioso o un NaN de señalización, y la conversión de la secuencia de caracteres externos puede convertir un NaN de señalización en un NaN silencioso.

El valor binario original se conservará convirtiéndolo a decimal y viceversa utilizando: [46]

  • 5 dígitos decimales para binary16,
  • 9 dígitos decimales para binary32,
  • 17 dígitos decimales para binary64,
  • 36 dígitos decimales para binary128.

Para otros formatos binarios, el número requerido de dígitos decimales es

donde p es el número de bits significativos en formato binario, por ejemplo, 237 bits para binary256.

(Nota: como límite de implementación, el redondeo correcto solo está garantizado para el número de dígitos decimales por encima más 3 para el formato binario admitido más grande. Por ejemplo, si binary32 es el formato binario admitido más grande, entonces una conversión de una secuencia externa decimal con Se garantiza que 12 dígitos decimales se redondearán correctamente cuando se conviertan a binary32; pero no la conversión de una secuencia de 13 dígitos decimales; sin embargo, el estándar recomienda que las implementaciones no impongan tal límite).

Cuando se usa un formato de coma flotante decimal, la representación decimal se conservará usando:

  • 7 dígitos decimales para decimal32,
  • 16 dígitos decimales para decimal64,
  • 34 dígitos decimales para decimal128.

Los algoritmos, con código, para la conversión correctamente redondeada de binario a decimal y de decimal a binario son discutidos por Gay, [47] y para pruebas - por Paxson y Kahan. [48]

Ver también [ editar ]

  • formato de coma flotante bfloat16
  • Binade
  • Coprocesador
  • C99 para ver ejemplos de código que demuestran el acceso y el uso de las funciones de IEEE 754.
  • Aritmética de coma flotante , para el historial, la justificación del diseño y el uso de ejemplo de las características de IEEE 754.
  • Aritmética de punto fijo , para un enfoque alternativo en el cálculo con números racionales (especialmente beneficioso cuando el rango del exponente es conocido, fijo o limitado en el momento de la compilación).
  • IBM System z9 , la primera CPU en implementar la aritmética decimal IEEE 754-2008 (usando microcódigo de hardware).
  • IBM z10 , IBM z196 , IBM zEC12 e IBM z13 , CPU que implementan la aritmética decimal IEEE 754-2008 completamente en el hardware.
  • ISO / IEC 10967 , aritmética independiente del lenguaje (LIA).
  • Formatos de coma flotante binarios de baja precisión y minifloat que siguen los principios de IEEE 754.
  • CPU POWER6 , POWER7 y POWER8 que implementan la aritmética decimal IEEE 754-2008 completamente en el hardware.
  • Strictfp , una palabra clave en el lenguaje de programación Java que restringe la aritmética a IEEE 754 de precisión simple y doble para garantizar la reproducibilidad en plataformas de hardware comunes.
  • El dilema del creador de mesas para obtener más información sobre el redondeo correcto de funciones.
  • Entorno numérico estándar de Apple
  • Punto flotante cónico

Notas [ editar ]

  1. ^ Por ejemplo, si la base es 10, el signo es 1 (que indica negativo), el significado es 12345 y el exponente es −3, entonces el valor del número es (−1) 1 × 12345 × 10 −3 = −1 × 12345 × 0,001 = −12,345.
  2. ^ incluido el bit implícito (que siempre es igual a 1 para números normales y 0 para números subnormales. Este bit implícito no se almacena en la memoria), pero no al bit de signo.
  3. ^ A diferencia del decimal, no existe un formato de intercambio binario de 96 bits de longitud. Sin embargo, este formato todavía se permite como formato sin intercambio.
  4. ^ El estándar recomienda 0 para los NaN de señalización, 1 para los NaN silenciosos, de modo que los NaN de señalización se puedan silenciar cambiando solo este bit a 1, mientras que lo contrario podría producir la codificación de un infinito.
  5. ^ No se levanta ninguna bandera en ciertos casos de subdesbordamiento.

Referencias [ editar ]

  1. ^ IEEE 754 2019
  2. ^ "FW: ISO / IEC / IEEE 60559 (IEEE Std 754-2008)" . grouper.ieee.org . Archivado desde el original el 27 de octubre de 2017 . Consultado el 4 de abril de 2018 .
  3. ^ "ISO / IEC / IEEE 60559: 2011 - tecnología de la información - sistemas de microprocesador - aritmética de punto flotante" . www.iso.org . Consultado el 4 de abril de 2018 .
  4. ↑ a b Cowlishaw, Mike (13 de noviembre de 2013). "IEEE 754-2008 errata" . speleotrove.com . Consultado el 24 de enero de 2020 .
  5. ^ "Revisión de ANSI / IEEE Std 754-2008" . ucbtest.org . Consultado el 4 de abril de 2018 .
  6. ^ "ISO / IEC 60559: 2020 - Tecnología de la información - Sistemas de microprocesador - Aritmética de punto flotante" . www.iso.org . Consultado el 25 de octubre de 2020 .
  7. ^ IEEE 754 2008 , §2.1.27.
  8. ^ "Internos de SpiderMonkey" . developer.mozilla.org . Consultado el 11 de marzo de 2018 .
  9. ^ Klemens, Ben (septiembre de 2014). Siglo XXI C: C Consejos de la nueva escuela . O'Reilly Media, Incorporated. pag. 160. ISBN 9781491904442. Consultado el 11 de marzo de 2018 .
  10. ^ "zuiderkwast / nanbox: boxeo de NaN en C" . GitHub . Consultado el 11 de marzo de 2018 .
  11. ^ IEEE 754 2008 , §3.6.
  12. ^ Cowlishaw, Mike. "Codificaciones aritméticas decimales" (PDF) . IBM . Consultado el 6 de agosto de 2015 .
  13. ^ IEEE 754 2008 , §3.7.
  14. ^ IEEE 754 2008 , §3.7 establece: "Los estándares de lenguaje deben definir mecanismos que admitan una precisión ampliable para cada base admitida".
  15. ^ IEEE 754 2008 , §3.7 establece: "Los estándares o implementaciones del lenguaje deben admitir un formato de precisión extendido que amplíe el formato básico más amplio que se admite en esa base".
  16. ^ IEEE 754 2019 , §2.1
  17. ^ IEEE 754 2008 , §5.3.1
  18. ^ IEEE 754 2008 , §5.4.1
  19. ^ IEEE 754 2008 , §5.4.2
  20. ^ IEEE 754 2008 , §5.4.3
  21. ^ IEEE 754 2008 , §5.3.2
  22. ^ IEEE 754 2008 , §5.3.3
  23. ^ IEEE 754 2008 , §5.5.1
  24. ^ IEEE 754 2008 , §5.10
  25. ^ IEEE 754 2008 , §5.11
  26. ^ IEEE 754 2008 , §5.7.2
  27. ^ IEEE 754 2008 , §5.7.4
  28. ^ IEEE 754 2019 , §5.11
  29. ^ IEEE 754 2019 , §5.10
  30. ^ IEEE 754 2019 , §5.10
  31. ^ "9.4. Decimal - Aritmética decimal de coma fija y coma flotante - Documentación de Python 3.6.5" . docs.python.org . Consultado el 4 de abril de 2018 .
  32. ^ "Aritmética decimal - condiciones excepcionales" . speleotrove.com . Consultado el 4 de abril de 2018 .
  33. ^ IEEE 754 2008 , §7.2 (h)
  34. ^ IEEE 754 2019 , §9.2
  35. ^ IEEE 754 2008 , cláusula 9
  36. ^ IEEE 754 2019 , §9.2.
  37. ^ "Re: funciones faltantes tanPi, asinPi y acosPi" . grouper.ieee.org . Archivado desde el original el 6 de julio de 2017 . Consultado el 4 de abril de 2018 .
  38. ^ IEEE 754 2008 , §9.3.
  39. ^ IEEE 754 2008 , §9.4.
  40. ^ IEEE 754 2019 , §9.5
  41. ^ Riedy, Jason; Demmel, James. "Operaciones aritméticas aumentadas propuestas para IEEE-754 2018" (PDF) . 25 ° IEEE Symbosium sobre aritmética informática (ARITH 2018). págs. 49–56. Archivado (PDF) desde el original el 23 de julio de 2019 . Consultado el 23 de julio de 2019 .
  42. ^ "Revisión 754 prevista para 2019" . 754r.ucbtest.org . Consultado el 23 de julio de 2019 .
  43. ^ IEEE 754 2019 , §9.6.
  44. ^ Chen, David. "La eliminación de las operaciones MinNum y MaxNum de IEEE 754-2019" (PDF) . grouper.ieee.org . Consultado el 5 de febrero de 2020 .
  45. ^ IEEE 754 2008 , §5.12.
  46. ^ IEEE 754 2008 , §5.12.2.
  47. Gay, David M. (30 de noviembre de 1990). "Conversiones binario-decimal y decimal-binario correctamente redondeadas" . Manuscrito de análisis numérico. Murry Hill, Nueva Jersey, EE.UU .: AT&T Laboratories. 90-10. Cite journal requires |journal= (help)
  48. ^ Paxson, Vern; Kahan, William (22 de mayo de 1991). "Un programa para probar la conversión decimal-binaria IEEE". Manuscrito. CiteSeerX 10.1.1.144.5889 .  Cite journal requires |journal= (help)

Estándares [ editar ]

  • Sociedad de Informática IEEE (2008-08-29). Estándar IEEE para aritmética de coma flotante . IEEE STD 754-2008 . IEEE. págs. 1-70. doi : 10.1109 / IEEESTD.2008.4610935 . ISBN 978-0-7381-5753-5. IEEE Std 754-2008.
  • Sociedad de Computación IEEE (2019-07-22). Estándar IEEE para aritmética de coma flotante . IEEE STD 754-2019 . IEEE. págs. 1-84. doi : 10.1109 / IEEESTD.2019.8766229 . ISBN 978-1-5044-5924-2. Norma IEEE 754-2019.
  • ISO / IEC / IEEE 60559: 2011 - Tecnología de la información - Sistemas de microprocesadores - Aritmética de coma flotante . Iso.org. Junio ​​de 2011. págs. 1-58.
  • ISO / IEC 60559: 2020 - Tecnología de la información - Sistemas de microprocesador - Aritmética de coma flotante . Iso.org. Mayo de 2020. págs. 1–74.

Referencias secundarias [ editar ]

  • Aritmética de coma flotante decimal , preguntas frecuentes, bibliografía y enlaces
  • Comparación de flotadores binarios
  • Material de referencia IEEE 754
  • IEEE 854-1987  - Historial y actas
  • Lecturas complementarias para IEEE 754 . Incluye perspectivas históricas.

Lectura adicional [ editar ]

  • Goldberg, David (marzo de 1991). "Lo que todo informático debe saber sobre la aritmética de punto flotante" . Encuestas de computación ACM . 23 (1): 5–48. doi : 10.1145 / 103162.103163 . S2CID  222008826 . Consultado el 8 de marzo de 2019 .
  • Hecker, Chris (febrero de 1996). "Vayamos al punto (flotante)" (PDF) . Revista para desarrolladores de juegos : 19–24. ISSN  1073-922X .
  • Severance, Charles (marzo de 1998). "IEEE 754: una entrevista con William Kahan" (PDF) . Computadora IEEE . 31 (3): 114-115. doi : 10.1109 / MC.1998.660194 . S2CID  33291145 . Consultado el 8 de marzo de 2019 .
  • Cowlishaw, Mike (junio de 2003). "Decimal Floating-Point: Algorism for Computers". 16º Simposio de IEEE sobre aritmética informática, 2003. Actas (PDF) . Actas 16º Simposio del IEEE sobre aritmética informática . Los Alamitos, Calif .: IEEE Computer Society. págs. 104-111. doi : 10.1109 / ARITH.2003.1207666 . ISBN 978-0-7695-1894-7. S2CID  18713046 . Consultado el 14 de noviembre de 2014 .. (Nota: el algoritmo no es un error ortográfico del título; consulte también algoritmo ).
  • Monniaux, David (mayo de 2008). "Las trampas de verificar cálculos de punto flotante" . Transacciones ACM sobre lenguajes y sistemas de programación . 30 (3): 1–41. arXiv : cs / 0701192 . doi : 10.1145 / 1353445.1353446 . ISSN  0164-0925 . S2CID  218578808 .: Un compendio de comportamientos no intuitivos de punto flotante en arquitecturas populares, con implicaciones para la verificación y prueba de programas.
  • Muller, Jean-Michel; Brunie, Nicolas; de Dinechin, Florent; Jeannerod, Claude-Pierre; Joldes, Mioara; Lefèvre, Vincent; Melquiond, Guillaume; Revol, Nathalie; Torres, Serge (2018) [2010]. Manual de aritmética de coma flotante (2 ed.). Birkhäuser . doi : 10.1007 / 978-3-319-76526-6 . ISBN 978-3-319-76525-9.
  • Overton, Michael L. (2001). Escrito en el Instituto Courant de Ciencias Matemáticas , Universidad de Nueva York, Nueva York, EE. UU. Computación numérica con aritmética de punto flotante IEEE (1 ed.). Filadelfia, Estados Unidos: SIAM . doi : 10.1137 / 1.9780898718072 . ISBN 978-0-89871-482-1. 978-0-89871-571-2, 0-89871-571-7.
  • Cleve Moler sobre números de coma flotante
  • Beebe, Nelson HF (22 de agosto de 2017). El manual de computación de funciones matemáticas - Programación usando la biblioteca de software portátil MathCW (1 ed.). Salt Lake City, UT, Estados Unidos: Springer International Publishing AG . doi : 10.1007 / 978-3-319-64110-2 . ISBN 978-3-319-64109-6. LCCN  2017947446 . S2CID  30244721 .
  • Hough, David G. (diciembre de 2019). "El estándar IEEE 754: uno para los libros de historia" . Computadora . IEEE . 52 (12): 109-112. doi : 10.1109 / MC.2019.2926614 . S2CID  208281213 .

Enlaces externos [ editar ]

  • Páginas de IEEE: 754-1985 - Estándar IEEE para aritmética de coma flotante binaria , 754-2008 - Estándar IEEE para aritmética de coma flotante , 754-2019 - Estándar IEEE para aritmética de coma flotante
  • Calculadoras binarias IEEE 754 en línea