stringtranslate.com

IEEE 754

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 dificultaban su uso confiable y portátil . Muchas unidades de punto flotante de hardware utilizan el estándar IEEE 754.

La norma define:

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, correcciones de defectos y nuevas operaciones recomendadas.

Historia

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

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 el estándar IEEE 754-1985 (aritmética de punto flotante binario) como el estándar IEEE 854-1987 para aritmética de punto 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 cumplir con el 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 ISO / IEC JTC 1 /SC 25 bajo el Acuerdo ISO/IEEE PSDO [2] [3] y publicada . [4]

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 correcciones de defectos (por ejemplo, minNum ), pero también incluye algunas operaciones nuevas recomendadas (por ejemplo, augmentedAddition ). [5] [6]

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 ISO/IEC JTC 1 /SC 25 y publicada. [7]

La próxima revisión proyectada de la norma es en 2028. [8]

Formatos

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

Un formato de punto flotante se especifica mediante

Un formato comprende

Por ejemplo, si b = 10, p = 7 y emax = 96, entonces emin = −95, el significado satisface 0 ≤ c9 999 999 y el exponente satisface −101 ≤ q ≤ 90 . En consecuencia, el número positivo distinto de cero más pequeño que se puede representar es 1×10 −101 , y el más grande es 9999999×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 números normales más pequeños (en magnitud) ; Los números distintos de cero entre estos números más pequeños se llaman números subnormales .

Representación y codificación en memoria.

Algunos números pueden tener varias representaciones posibles de punto flotante. Por ejemplo, si b  = 10 y p  = 7, entonces −12,345 se puede representar mediante −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 vuelve única eligiendo el exponente representable más pequeño que permita representar el valor 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, y el 0 se utiliza 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 significado siempre será 1. En consecuencia, un 1 inicial puede estar implícito en lugar de estar presente explícitamente en la codificación de la memoria. y según el estándar, la parte representada explícitamente del significado estará entre 0 y 1. Esta regla se llama convención de bits inicial , convención de bits implícita o convención de bits ocultos . 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 del exponente normal y escalan según el exponente más pequeño representado 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 transportar otra información: un bit de signo (que no tiene significado, pero puede ser utilizado por algunas operaciones) y una carga útil , que está destinada al diagnóstico. información que indica la fuente del NaN (pero la carga útil puede tener otros usos, como NaN-boxing [10] [11] [12] ).

Formatos básicos y de intercambio.

El estándar define cinco formatos básicos que reciben su nombre por su base numérica y el número de bits utilizados en su codificación de intercambio. Hay tres formatos básicos binarios de punto flotante (codificados con 32, 64 o 128 bits) y dos formatos básicos decimales de punto flotante (codificados con 64 o 128 bits). Los formatos binario32 y binario64 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. [13] Para los formatos binarios, se requiere la convención de bits iniciales. La siguiente tabla resume algunos de los posibles formatos de intercambio (incluidos los formatos básicos).

En la tabla anterior, los valores enteros son exactos, mientras que los valores en notación decimal (por ejemplo, 1,0) son valores redondeados. Los exponentes mínimos enumerados son para números normales; la representación especial de números subnormales permite representar números aún más pequeños (en magnitud) con cierta pérdida de precisión. Por ejemplo, el número positivo más pequeño que se puede representar en binario64 es 2 −1074 ; Las contribuciones a la cifra −1074 incluyen el valor emin −1022 y todos menos uno de los 53 bits significativos (2 −1022 − (53 − 1)  = 2 −1074 ).

Los dígitos decimales es la precisión del formato expresada en términos de un número equivalente de dígitos decimales. Se calcula como dígitos × log 10 base . Por ejemplo, binario128 tiene aproximadamente la misma precisión que un número decimal de 34 dígitos.

log 10  MAXVAL es una medida del rango de codificación. Su parte entera es el exponente más grande que se muestra en la salida de un valor en notación científica con un dígito inicial en el significado antes del punto decimal (por ejemplo, 1,698·10 38 está cerca del valor más grande en binario32, 9,999999·10 96 es el valor más grande en decimal32).

Los formatos binario32 (simple) y binario64 (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.

Precisión de binario32 y binario64 en el rango de 10 −12 a 10 12

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

y el diseño de 64 bits es similar.

Formatos de precisión extendidos y extensibles.

El estándar especifica formatos de precisión extendidos y extensibles opcionales, que proporcionan mayor precisión que los formatos básicos. [14] Un formato de precisión extendida extiende un formato básico usando 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 exponente. Una implementación puede utilizar cualquier representación interna que elija para dichos formatos; todo lo que hay que definir 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.

El estándar recomienda que los estándares de lenguaje proporcionen un método para especificar p y emax para cada base b admitida . [15] El estándar recomienda que los estándares e implementaciones del lenguaje admitan un formato extendido que tenga una mayor precisión que el formato básico más grande admitido para cada base b . [16] 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. Así, por ejemplo, un número binario de precisión extendida de 64 bits debe tener un 'emax' de al menos 16383. El formato extendido x87 de 80 bits cumple con este requisito.

El estándar original IEEE 754-1985 también tenía el concepto de formatos extendidos , pero sin ninguna relación obligatoria entre emin y emax . Por ejemplo, el formato Motorola 68881 de 80 bits, [17] donde emin = − emax , era un formato extendido conforme, pero dejó de serlo en la revisión de 2008.

Formatos de intercambio

Los formatos de intercambio están destinados al intercambio de datos de punto flotante utilizando una cadena de bits de longitud fija para un formato determinado.

Binario

Para el intercambio de números binarios de coma flotante, se definen formatos de intercambio de longitud 16 bits, 32 bits, 64 bits y cualquier múltiplo de 32 bits ≥ 128 [e] . El formato de 16 bits está destinado al intercambio o almacenamiento de números pequeños (p. ej., 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 exponente compensado 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 completa con los bits 1 para indicar infinito (campo de significado final = 0) o NaN (campo de significado 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 significativo final, [f] y la carga útil se transporta en los bits restantes.

Decimal

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, el exponente y el significado. Se definen dos codificaciones diferentes a nivel de bits 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 decimales densamente empaquetados o, alternativamente, como un entero binario . El primero es más conveniente para la implementación directa del estándar en hardware, 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

La norma define cinco reglas de redondeo. Las dos primeras reglas redondean al valor más cercano; los demás se denominan redondeos dirigidos :

Redondeos al más cercano

En los extremos, un valor con una magnitud estrictamente menor que se redondeará al número finito mínimo o máximo (dependiendo del signo del valor). Cualquier número con exactamente esta magnitud se considera empate; esta elección de empate puede conceptualizarse como el punto medio entre y , que, si el exponente no estuviera limitado, serían los siguientes números de punto flotante representables de mayor magnitud. Los números con una magnitud estrictamente mayor que k se redondean al infinito correspondiente. [18]

"Redondear al más cercano, vincular al par" es el valor predeterminado para punto flotante binario y el valor predeterminado recomendado para decimal. "Redondear al más cercano, vínculos a distancia" solo se requiere para implementaciones decimales. [19]

Redondeos dirigidos

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

Operaciones requeridas

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

Predicados de comparación

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

Predicado de orden total

El estándar proporciona un predicado totalOrder , que define un orden total en los miembros canónicos del formato aritmético admitido. [33] El predicado concuerda con los predicados de comparación (ver sección § Predicados de comparación) cuando un número de punto flotante es menor que el otro. Las principales diferencias son: [34]

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. [33] IEEE 754-2019 incorpora aclaraciones de totalOrder .

Para los formatos de intercambio binario cuya codificación sigue la recomendación IEEE 754-2008 sobre la ubicación del bit de señalización NaN , la comparación es idéntica a una que convierte los números de punto flotante en un entero de signo y magnitud (asumiendo un orden de carga útil consistente con este comparación), un viejo truco para comparar FP sin una FPU. [35]

Manejo de excepciones

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. [g] No se requiere ningún otro manejo de excepciones, pero se recomiendan alternativas adicionales no predeterminadas (consulte § Manejo de excepciones alternativo).

Las cinco posibles excepciones son

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

Algunas implementaciones de punto flotante decimal definen excepciones adicionales, [36] [37] que no forman parte de IEEE 754:

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

Valores especiales

Cero firmado

En el estándar IEEE 754, el cero tiene signo, lo que significa que existen tanto un "cero positivo" (+0) como un "cero negativo" (-0). En la mayoría de los entornos de ejecución , el cero positivo suele imprimirse como " 0" y el cero negativo como " -0". Los dos valores se comportan igual en comparaciones numéricas, pero algunas operaciones arrojan resultados diferentes para +0 y −0. Por ejemplo, 1/(−0) devuelve infinito negativo, mientras que 1/(+0) devuelve infinito positivo (de modo que se mantiene la identidad 1/(1/±∞) = ±∞ ). Otras funciones comunes con una discontinuidad en x =0 que podrían tratar +0 y −0 de manera diferente incluyen log ( x ), signum ( x ) y la raíz cuadrada principal de y + xi para cualquier número negativo y . Como ocurre con cualquier esquema de aproximación, las operaciones que implican "cero negativo" pueden causar confusión en ocasiones. Por ejemplo, en IEEE 754, x = y no siempre implica 1/ x = 1/ y , como 0 = −0 sino 1/0 ≠ 1/(−0) . [39]

Números subnormales

Los valores subnormales llenan el espacio de subdesbordamiento con valores donde la distancia absoluta entre ellos es la misma que para los valores adyacentes justo fuera del espacio de subdesbordamiento. Esta es una mejora con respecto a la práctica anterior de tener solo cero en la brecha de subflujo, y donde los resultados de subflujo se reemplazaban por cero (flujo a cero). [40]

El hardware de punto flotante moderno generalmente maneja valores subnormales (así como valores normales) y no requiere emulación de software para valores subnormales.

Infinitos

Los infinitos de la recta numérica real extendida se pueden representar en tipos de datos de punto flotante IEEE, al igual que los valores de punto flotante ordinarios como 1, 1,5, etc. No son valores de error de ninguna manera, aunque a menudo lo son (depende del redondeo). ) utilizados como valores de reemplazo cuando hay un desbordamiento. Tras una excepción de división por cero, se devuelve un infinito positivo o negativo como resultado exacto. Un infinito también se puede introducir como un número (como la macro "INFINITY" de C, o " " si el lenguaje de programación permite esa sintaxis).

IEEE 754 requiere que los infinitos se manejen de una manera razonable, como

NaN

IEEE 754 especifica un valor especial llamado "No es un número" (NaN) que se devolverá como resultado de ciertas operaciones "no válidas", como 0/0, ∞×0 o sqrt(−1). En general, los NaN se propagarán, es decir, la mayoría de las operaciones que involucran un NaN darán como resultado un NaN, aunque las funciones que darían algún resultado definido para cualquier valor de punto flotante dado también lo harán para los NaN, por ejemplo, NaN ^ 0 = 1. Hay dos tipos de NaN: los NaN silenciosos predeterminados y, opcionalmente, los NaN de señalización . Una señalización NaN en cualquier operación aritmética (incluidas las comparaciones numéricas) provocará que se señale una excepción de "operación no válida".

La representación de NaN especificada por el estándar tiene algunos bits no especificados que podrían usarse para codificar el tipo o la fuente del error; pero no existe un estándar para esa codificación. En teoría, un sistema de tiempo de ejecución podría utilizar los NaN de señalización para marcar variables no inicializadas o ampliar los números de punto flotante con otros valores especiales sin ralentizar los cálculos con valores ordinarios, aunque dichas extensiones no son comunes.

Justificación del diseño

William Kahan . Arquitecto principal del coprocesador de punto flotante Intel 80x87 y del estándar de punto flotante IEEE 754.

Es un error común pensar que las características más esotéricas del estándar IEEE 754 discutidas aquí, como formatos extendidos, NaN, infinitos, subnormales, etc., solo son de interés para analistas numéricos o para aplicaciones numéricas avanzadas. De hecho, ocurre lo contrario: estas características están diseñadas para brindar valores predeterminados sólidos y seguros para programadores numéricamente no sofisticados, además de admitir bibliotecas numéricas sofisticadas creadas por expertos. El diseñador clave de IEEE 754, William Kahan, señala que es incorrecto "... [considerar] características del estándar IEEE 754 para aritmética binaria de coma flotante que... [no] se consideran características utilizables únicamente por los numéricos". expertos los hechos son todo lo contrario En 1977 esas características fueron diseñadas en el Intel 8087 para servir al mercado más amplio posible... El análisis de errores nos dice cómo diseñar aritmética de punto flotante, como el estándar IEEE 754, moderadamente tolerante. -significa ignorancia entre los programadores". [41]

Una propiedad de los formatos de precisión simple y doble es que su codificación permite ordenarlos fácilmente sin utilizar hardware de punto flotante, como si los bits representaran enteros de signo-magnitud , aunque no está claro si esto fue una consideración de diseño (no Parece digno de mención que la anterior representación de punto flotante hexadecimal de IBM también tenía esta propiedad para números normalizados). Con la representación predominante en complemento a dos , interpretar los bits como enteros con signo ordena los positivos correctamente, pero con los negativos invertidos; como una posible corrección para eso, con un xor para invertir el bit de signo para valores positivos y todos los bits para valores negativos, todos los valores se pueden ordenar como enteros sin signo (con −0 < +0 ). [35]

Recomendaciones

Manejo de excepciones alternativo

El estándar recomienda un 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

La cláusula 9 del estándar recomienda operaciones matemáticas adicionales [45] que los estándares lingüísticos deberían definir. [46] No se requiere ninguno para cumplir con la norma.

Se recomiendan las siguientes operaciones aritméticas, que deben redondearse correctamente: [47]

Las funciones y no formaban parte del estándar IEEE 754-2008 porque se consideraban menos necesarias. [49] y fueron mencionados, pero esto se consideró un error. [5] Los tres se agregaron en la revisión de 2019.

Las operaciones recomendadas también incluyen configurar y acceder a la dirección de redondeo del modo dinámico [50] y operaciones de reducción de vectores definidas por la implementación, como suma, producto escalado y producto escalar , cuya precisión no está especificada por el estándar. [51]

A partir de 2019 , también se recomiendan operaciones aritméticas aumentadas [52] para los formatos binarios. Estas operaciones, especificadas para suma, resta y multiplicación, producen un par de valores que consisten en un resultado correctamente redondeado al más cercano en el formato y el término de error, que se puede representar 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. [53] [54]

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

Evaluación de expresiones

El estándar recomienda cómo los estándares del lenguaje deberían 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 del estándar de 1985 dejaba aspectos de la interfaz del lenguaje sin especificar, lo que conducía a un comportamiento inconsistente entre compiladores o a diferentes niveles de optimización en un compilador optimizado .

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. Esto se conoce como ancho preferido en el estándar y debería ser posible configurarlo por bloque. Se deben calcular los cálculos intermedios dentro de las expresiones y guardar los temporales, utilizando el ancho máximo de los operandos y el ancho preferido, si está establecido. Así, por ejemplo, un compilador destinado a hardware de punto flotante x87 debería tener un medio para especificar que los cálculos intermedios deben utilizar el formato doblemente extendido . El valor almacenado de una variable siempre debe usarse al evaluar expresiones posteriores, en lugar de cualquier precursor anterior a redondear y asignar a la variable.

Reproducibilidad

La versión IEEE 754-1985 del estándar permitió muchas variaciones en las implementaciones (como la codificación de algunos valores y la detección de ciertas excepciones). IEEE 754-2008 ha reducido estas asignaciones, pero aún quedan algunas variaciones (especialmente para formatos binarios). La cláusula de reproducibilidad recomienda que los estándares del 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

El estándar requiere operaciones para convertir entre formatos básicos y formatos de secuencia de caracteres externos . [57] Se requieren conversiones hacia y desde un formato de carácter decimal para todos los formatos. La conversión a una secuencia de caracteres externa debe ser tal que la conversión de nuevo usando redondeo al más cercano y los vínculos pares recuperen 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 externa puede convertir un NaN de señalización en un NaN silencioso.

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

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

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

Cuando se utiliza un formato de punto flotante decimal, la representación decimal se conservará mediante:

Gay [59] analiza los algoritmos, con código, para la conversión redondeada correctamente de binario a decimal y de decimal a binario, y Paxson y Kahan para realizar pruebas. [60]

Literales hexadecimales

El estándar recomienda proporcionar conversiones hacia y desde secuencias externas de caracteres con significado hexadecimal , basadas en los literales de punto flotante hexadecimal de C99 . Dicho literal consta de un signo opcional ( +o -), el indicador "0x", un número hexadecimal con o sin punto, un indicador de exponente "p" y un exponente decimal con signo opcional. La sintaxis no distingue entre mayúsculas y minúsculas. [61] El exponente decimal se escala en potencias de 2, por lo que, por ejemplo, 0x0.1p-4es 1/256. [62]

Ver también

Notas

  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. ^ Valores aproximados. Para conocer los valores exactos, consulte la entrada individual de Wikipedia de cada formato.
  3. ^ Número de dígitos de la base utilizados, incluido cualquier dígito implícito, pero sin contar el bit de signo.
  4. ^ Número correspondiente de dígitos decimales; consulte el texto para obtener más detalles.
  5. ^ A diferencia del decimal, no existe un formato de intercambio binario de 96 bits de longitud. Sin embargo, este formato todavía está permitido como formato de no intercambio.
  6. ^ El estándar recomienda 0 para señalar NaN, 1 para NaN silenciosos, de modo que un NaN de señalización se pueda silenciar cambiando solo este bit a 1, mientras que lo contrario podría producir la codificación de un infinito.
  7. ^ No se iza ninguna bandera en ciertos casos de desbordamiento.
  8. ^ Como límite de implementación, solo se garantiza el redondeo correcto para la cantidad de dígitos decimales necesarios más 3 para el formato binario más grande admitido. Por ejemplo, si binario32 es el formato binario más grande admitido, entonces se garantiza que una conversión de una secuencia externa decimal con 12 dígitos decimales se redondeará correctamente cuando se convierta a binario32; pero la conversión de una secuencia de 13 dígitos decimales no lo es; sin embargo, el estándar recomienda que las implementaciones no impongan tal límite.

Referencias

  1. ^ IEEE 754 2019
  2. ^ Haasz, Jodi. "FW: ISO/IEC/IEEE 60559 (IEEE Std 754-2008)". grupoer.ieee.org . Archivado desde el original el 27 de octubre de 2017 . Consultado el 4 de abril de 2018 .
  3. ^ "Acuerdo de cooperación con la organización de desarrollo de estándares de socios ISO/IEEE (PSDO)" (PDF) . YO ASI. 2007-12-19 . Consultado el 27 de diciembre de 2021 .
  4. ^ ISO/IEC JTC 1/SC 25 2011.
  5. ^ ab Cowlishaw, Mike (13 de noviembre de 2013). "Erratas IEEE 754-2008". speleotrove.com . Consultado el 24 de enero de 2020 .
  6. ^ "Norma ANSI/IEEE 754-2019". ucbtest.org . Consultado el 16 de enero de 2024 .
  7. ^ ISO/IEC JTC 1/SC 25 2020.
  8. ^ Riedy, E. Jason (26 de junio de 2018), "Planes para el estándar IEEE 754 - 2028" (PDF) , 25º Simposio IEEE sobre aritmética informática , Amherst, MA: IEEE
  9. ^ IEEE 754 2008, §2.1.27.
  10. ^ "Partes internas de SpiderMonkey". desarrollador.mozilla.org . Consultado el 11 de marzo de 2018 .
  11. ^ Klemens, Ben (septiembre de 2014). Siglo XXI C: Consejos C de la nueva escuela. O'Reilly Media, Incorporada. pag. 160.ISBN 9781491904442. Consultado el 11 de marzo de 2018 .
  12. ^ "zuiderkwast/nanbox: NaN-boxing en C". GitHub . Consultado el 11 de marzo de 2018 .
  13. ^ IEEE 754 2008, §3.6.
  14. ^ IEEE 754 2008, §3.7.
  15. ^ IEEE 754 2008, §3.7 establece: "Los estándares lingüísticos deben definir mecanismos que admitan una precisión extensible para cada base admitida".
  16. ^ IEEE 754 2008, §3.7 establece: "Los estándares o implementaciones de lenguaje deben admitir un formato de precisión extendida que extienda el formato básico más amplio admitido en esa base".
  17. ^ Familia Motorola MC68000 (PDF) . Manual de referencia del programador. Semiconductores NXP. 1992, págs. 1–16, 1–18, 1–23.
  18. ^ IEEE 754 2008, §4.3.1. "En los siguientes dos atributos de dirección de redondeo, un resultado infinitamente preciso con magnitud al menos se redondeará sin cambio de signo".
  19. ^ IEEE 754 2008, §4.3.3
  20. ^ IEEE 754 2019, §2.1
  21. ^ abc IEEE 754 2008, §5.3.1
  22. ^ ab IEEE 754 2008, §5.4.1
  23. ^ IEEE 754 2008, §5.4.2
  24. ^ IEEE 754 2008, §5.4.3
  25. ^ IEEE 754 2008, §5.3.2
  26. ^ IEEE 754 2008, §5.3.3
  27. ^ IEEE 754 2008, §5.5.1
  28. ^ IEEE 754 2008, §5.10
  29. ^ IEEE 754 2008, §5.11
  30. ^ IEEE 754 2008, §5.7.2
  31. ^ IEEE 754 2008, §5.7.4
  32. ^ IEEE 754 2019, §5.11
  33. ^ abc IEEE 754 2019, §5.10
  34. ^ "Implemente total_cmp para f32, f64 de golddranks · Solicitud de extracción n.º 72568 · rust-lang/rust". GitHub .– contiene citas relevantes de IEEE 754-2008 y -2019. Contiene una implementación y explicación de un juego de palabras.
  35. ^ ab Herf, Michael (diciembre de 2001). "trucos de base". estereopsis: gráficos .
  36. ^ "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 .
  37. ^ "Aritmética decimal - Condiciones excepcionales". speleotrove.com . Consultado el 4 de abril de 2018 .
  38. ^ IEEE 754 2008, §7.2 (h)
  39. ^ Goldberg 1991.
  40. ^ Müller, Jean-Michel; Brisebarre, Nicolás; de Dinechin, Florent; Jeannerod, Claude-Pierre; Lefèvre, Vicente; Melquiond, Guillaume; Revol, Nathalie ; Stehlé, Damián; Torres, Serge (2010). Manual de aritmética de coma flotante (1 ed.). Birkhäuser . doi :10.1007/978-0-8176-4705-6. ISBN 978-0-8176-4704-9. LCCN  2009939668.
  41. ^ ab Kahan, William Morton ; Darcy, José (2001) [1 de marzo de 1998]. "Cómo el punto flotante de Java perjudica a todos en todas partes" (PDF) . Archivado (PDF) desde el original el 16 de agosto de 2000 . Consultado el 5 de septiembre de 2003 .
  42. ^ Kahan, William Morton (12 de febrero de 1981). "¿Por qué necesitamos un estándar aritmético de punto flotante?" (PDF) . pag. 26. Archivado (PDF) desde el original el 4 de diciembre de 2004.
  43. ^ Indemnización, Charles (20 de febrero de 1998). "Una entrevista con el viejo del punto flotante".
  44. ^ ab Kahan, William Morton (11 de junio de 1996). "El nefasto efecto de los puntos de referencia informáticos en las matemáticas, la física y la química aplicadas" (PDF) . Archivado (PDF) desde el original el 13 de octubre de 2013.
  45. ^ IEEE 754 2019, §9.2
  46. ^ IEEE 754 2008, cláusula 9
  47. ^ IEEE 754 2019, §9.2.
  48. ^ "Demasiado poder: pow vs powr, powd, pown, rootn, compuesto". grupoer.ieee.org . Consultado el 16 de enero de 2024 . Dado que las tasas de crecimiento no pueden ser inferiores a -1, dichas tasas indican excepciones no válidas.
  49. ^ "Re: Faltan funciones tanPi, asinPi y acosPi". grupoer.ieee.org . Archivado desde el original el 6 de julio de 2017 . Consultado el 4 de abril de 2018 .
  50. ^ IEEE 754 2008, §9.3.
  51. ^ IEEE 754 2008, §9.4.
  52. ^ IEEE 754 2019, §9.5
  53. ^ Riedy, Jason; Demmel, James. "Operaciones aritméticas aumentadas propuestas para IEEE-754 2018" (PDF) . 25º Simbosio IEEE 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 .
  54. ^ "ANSI/IEEE Std 754-2019 - Documentos de antecedentes". grupoer.ieee.org . Consultado el 16 de enero de 2024 .
  55. ^ IEEE 754 2019, §9.6.
  56. ^ Chen, David. "La eliminación/degradación de las operaciones MinNum y MaxNum de IEEE 754-2018" (PDF) . grupoer.ieee.org . Consultado el 16 de enero de 2024 .
  57. ^ IEEE 754 2008, §5.12.
  58. ^ IEEE 754 2008, §5.12.2.
  59. ^ 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
  60. ^ Paxson, Vern; Kahan, William (22 de mayo de 1991), Un programa para probar la conversión decimal-binaria de IEEE , manuscrito, CiteSeerX 10.1.1.144.5889 
  61. ^ IEEE 754 2008, §5.12.3
  62. ^ "6.9.3. Literales de coma flotante hexadecimal - Guía del usuario del compilador Glasgow Haskell 9.3.20220129". ghc.gitlab.haskell.org . Consultado el 29 de enero de 2022 .

Estándares

Referencias secundarias

Otras lecturas

enlaces externos