Articulo de referencia

Precisión extendida

La precisión extendida se refiere a formatos de números de punto flotante que proporcionan mayor precisión que los formatos básicos de punto flotante. [ 1 ] Los formatos de prec...

La precisión extendida se refiere a formatos de números de punto flotante que proporcionan mayor precisión que los formatos básicos de punto flotante. [ 1 ] Los formatos de precisión extendida admiten un formato básico al minimizar los errores de redondeo y desbordamiento en los valores intermedios de las expresiones en el formato base. En contraste con la precisión extendida , la aritmética de precisión arbitraria se refiere a implementaciones de tipos numéricos mucho más grandes (con un recuento de almacenamiento que generalmente no es una potencia de dos) utilizando software especial (o, rara vez, hardware).

Implementaciones de precisión extendida

Existe una larga historia de formatos de punto flotante extendidos que se remonta casi a mediados del siglo XX. Varios fabricantes han utilizado diferentes formatos de precisión extendida para distintas máquinas. En muchos casos, el formato de precisión extendida no es exactamente igual a una ampliación de los formatos ordinarios de precisión simple y doble que pretende extender. En algunos casos, la implementación fue simplemente un cambio basado en software en el formato de datos de punto flotante, pero en la mayoría de los casos, la precisión extendida se implementó en hardware, ya sea integrada en el propio procesador central o, más a menudo, integrada en el hardware de un procesador opcional conectado llamado " unidad de punto flotante " (FPU) o "procesador de punto flotante" ( FPP ), accesible a la CPU como un dispositivo de entrada/salida rápido.

Formatos de precisión extendida de IBM

El IBM 1130 , vendido en 1965, [ 2 ] ofrecía dos formatos de punto flotante: un formato de "precisión estándar" de 32 bits y un formato de "precisión extendida" de 40 bits. El formato de precisión estándar contiene una mantisa de complemento a dos de 24 bits , mientras que el de precisión extendida utiliza una mantisa de complemento a dos de 32 bits. Este último formato aprovecha al máximo las operaciones con enteros de 32 bits de la CPU. La característica común a ambos formatos es un campo de 8 bits que contiene la potencia de dos con un sesgo de 128. Las operaciones aritméticas de punto flotante se realizan mediante software y no se admite la doble precisión . El formato extendido ocupa tres palabras de 16 bits, y el espacio adicional simplemente se ignora. [ 3 ]

El IBM System/360 admite un formato de punto flotante "corto" de 32 bits y un formato de punto flotante "largo" de 64 bits. [ 4 ] El 360/85 y el posterior System/370 añaden compatibilidad con un formato "extendido" de 128 bits. [ 5 ] Estos formatos siguen siendo compatibles con el diseño actual , donde ahora se denominan formatos de " punto flotante hexadecimal " (HFP).

Formato de precisión extendida MBF de Microsoft

La versión de Microsoft BASIC para la CPU 6502 , como en adaptaciones como Commodore BASIC , AppleSoft BASIC , KIM-1 BASIC o MicroTAN BASIC , admite una variante extendida de 40 bits del formato de punto flotante Microsoft Binary Format (MBF) desde 1977. [ 6 ]

Formatos de precisión extendida IEEE 754

El estándar de punto flotante IEEE 754 recomienda que las implementaciones proporcionen formatos de precisión extendida. El estándar especifica los requisitos mínimos para un formato extendido, pero no especifica una codificación. [ 7 ] La codificación es elección del implementador. [ 8 ]

Los procesadores IA32 , x86-64 e Itanium son compatibles con el formato más influyente de este estándar, el formato "doblemente extendido" de Intel de 80 bits (con mantisa de 64 bits), que se describe en la siguiente sección.

Los coprocesadores matemáticos Motorola 6888x y los procesadores Motorola 68040 y 68060 también admiten un formato de precisión extendida de mantisa de 64 bits (similar al formato Intel, aunque rellenado a un formato de 96 bits con 16  bits no utilizados insertados entre los campos del exponente y la mantisa, y los valores con exponente cero y bit 63 uno son valores normalizados [ 9 ] ). Los procesadores Coldfire posteriores no admiten este formato de precisión extendida de 96 bits. [ 10 ]

El coprocesador matemático FPA10 para los primeros procesadores ARM también admite un formato de precisión extendida de mantisa de 64 bits (similar al formato de Intel, aunque rellenado a un formato de 96 bits con 16  bits cero insertados entre los campos de signo y exponente), pero sin redondeo correcto. [ 11 ]

Los formatos de 80 bits x87 y Motorola  68881 cumplen con los requisitos del formato doble extendido IEEE 754-1985, [ 12 ] al igual que el formato binario de 128 bits IEEE  754 .

formato de precisión extendida x86

El formato de precisión extendida x86 es un formato de 80 bits implementado por primera vez en el coprocesador matemático Intel 8087 y es compatible con todos los procesadores basados ​​en el diseño x86 que incorporan una unidad de punto flotante (FPU).

El Intel 8087 fue el primer dispositivo x86 que admitía aritmética de punto flotante en hardware. Fue diseñado para admitir un formato de "precisión simple" de 32 bits y un formato de "doble precisión" de 64 bits para codificar e intercambiar números de punto flotante. El formato extendido fue diseñado no para almacenar datos con mayor precisión, sino para permitir el cálculo de resultados dobles temporales de manera más confiable y precisa al minimizar los errores de desbordamiento y redondeo en cálculos intermedios. [ a ] ​​[ 14 ] [ 15 ] Todos los registros de punto flotante en el 8087 mantienen este formato, y automáticamente convierte los números a este formato cuando carga registros desde la memoria y también convierte los resultados de vuelta a los formatos más convencionales cuando almacena los registros de nuevo en la memoria. Para permitir que los resultados de subexpresiones intermedias se guarden en variables temporales de precisión extendida y continúen a través de instrucciones del lenguaje de programación, y que los cálculos interrumpidos se reanuden donde se interrumpieron, proporciona instrucciones que transfieren valores entre estos registros internos y la memoria sin realizar ninguna conversión, lo que permite el acceso al formato extendido para cálculos [ b ] , reviviendo también el problema de la precisión de las funciones de dichos números, pero con una precisión mayor.

Las unidades de punto flotante (FPU) de todos los procesadores x86 posteriores han admitido este formato. Como resultado, se puede desarrollar software que aproveche la mayor precisión que proporciona este formato. William Kahan , diseñador principal de la aritmética x87 y de la  propuesta inicial del estándar IEEE 754, señala sobre el desarrollo del punto flotante x87: "  Se incluyó un formato extendido tan amplio como nos atrevimos (80 bits) para cumplir la misma función de soporte que el  formato interno de 13 decimales cumple en las calculadoras de 10 decimales de Hewlett-Packard  ". [ 17 ] Además, Kahan señala que 64  bits era la mantisa más amplia a través de la cual se podía realizar la propagación de acarreo sin aumentar el tiempo de ciclo en el 8087, [ 18 ] y que la precisión extendida x87 se diseñó para ser extensible a una mayor precisión en futuros procesadores:

"Por ahora, el formato extendido de 10  bytes es un compromiso aceptable entre el valor de la aritmética de alta precisión y el costo de implementarla para que sea rápida; muy pronto, dos bytes más de precisión serán aceptables y, finalmente, un formato de 16  bytes ... Ese tipo de evolución gradual hacia una mayor precisión ya se contemplaba cuando se elaboró ​​la norma IEEE  754 para aritmética de punto flotante ." [ 19 ]

Este formato de 80 bits utiliza un bit para el signo de la mantisa, 15  bits para el campo del exponente (es decir, el mismo rango que el formato IEEE 754 de precisión cuádruple de 128 bits ) y 64  bits para la mantisa. El campo del exponente está sesgado por 16383, lo que significa que 16383 debe restarse del valor en el campo del exponente para calcular la potencia real de 2. [ 20 ] Se reserva un valor de campo de exponente de 32767 (los quince bits 1 ) para permitir la representación de estados especiales como infinito y No es un número . Si el campo del exponente es cero, el valor es un número subnormal y el exponente de 2 es −16382. [ 21 ]

En la siguiente tabla, " s " es el valor del bit de signo (0 significa positivo, 1 significa negativo), " e " es el valor del campo del exponente interpretado como un entero positivo, y " m " es la mantisa interpretada como un número binario positivo, donde el punto binario se encuentra entre los bits  63 y 62. El campo " m " es la combinación de las partes entera y fraccionaria del diagrama anterior.

A diferencia de los formatos de precisión simple y doble , este formato no utiliza un bit implícito u oculto . En cambio, el bit  63 contiene la parte entera de la mantisa y los bits  62 a 0 contienen la parte fraccionaria. El bit  63 será 1 en todos los números normalizados. Este diseño presentaba varias ventajas durante el desarrollo del 8087 :

  • Los cálculos se pueden completar un poco más rápido si todos los bits de la mantisa están presentes en el registro.
  • Una mantisa de 64 bits proporciona la precisión suficiente para evitar la pérdida de precisión cuando los resultados se convierten de nuevo al formato de doble precisión en la gran mayoría de los casos.
  • Este formato proporciona un mecanismo para indicar la pérdida de precisión debido al subdesbordamiento, que puede llevarse a cabo en operaciones posteriores. Por ejemplo, el cálculo 2 × 10 −4930 × 3 × 10 −10 × 4 × 1020 genera el resultado intermedio6 × 10 −4940 , que es unsubnormaly también implica pérdida de precisión. El producto de todos los términos es24 × 10 −4920 , que puede representarse como un número normalizado. El80287podía completar este cálculo e indicar la pérdida de precisión devolviendo un resultado "subnormal" (exponente distinto de 0, bit63 = 0). [ 22 ] [ 23 ] Los procesadores posteriores al80387ya no generan valores no normales y no admiten entradas no normales en las operaciones. Generarán un subnormal si se produce un subdesbordamiento, pero generarán un resultado normalizado si las operaciones subsiguientes sobre el subnormal pueden normalizarse. [ 24 ] 

Ejemplos

Estos ejemplos se presentan en representación binaria , en formato hexadecimal , del valor de punto flotante. Esto incluye el signo, el exponente (sesgado) y la mantisa.

0000 0000 0000 0000 0001 16 = 2 −16382 × 2 −63 = 2 −16445 ≈ 3.64519953188247460252841 × 10 −4951 (número subnormal positivo más pequeño)
0000 7fff ffff ffff ffff 16 = 2 −16382 × (1 − 2 −63 ) ≈ 3,36210314311209350589816 × 10 −4932 (número subnormal más grande)
0001 8000 0000 0000 0000 16 = 2 −16382 ≈ 3.36210314311209350626268 × 10 −4932 (número normal positivo más pequeño)
7ffe ffff ffff ffff ffff 16 = 2 16384 × (1 − 2 −64 ) ≈ 1,18973149535723176502126 × 10 4932 (número normal más grande)
3ffe ffff ffff ffff ffff 16 = 1 − 2 −64 ≈ 0,99999999999999999994579 (el mayor número menor que uno)
3fff 8000 0000 0000 0000 16 = 1 (uno)
3fff 8000 0000 0000 0001 16 = 1 + 2 −63 ≈ 1.0000000000000000010842 (número más pequeño mayor que uno)
4000 8000 0000 0000 0000 16 = 2 c000 8000 0000 0000 0000 16 = −2
0000 0000 0000 0000 0000 16 = 0 8000 0000 0000 0000 0000 16 = −0
3ffd aaaa aaaa aaaa aaab 16 ≈ 0.33333333333333333334237 (aproximación más cercana a  )
4000 adf8 5458 a2bb 4a9b 16 ≈ 2,71828182845904523542817 (la aproximación más cercana a e)
4000 c90f daa2 2168 c235 16 ≈ 3.14159265358979323851281 (aproximación más cercana a π)

Introducción al uso

El formato de punto flotante de 80 bits estaba ampliamente disponible en 1984, [ 25 ] después del desarrollo de C, Fortran y lenguajes de computadora similares, que inicialmente solo ofrecían los tamaños comunes de punto flotante de 32 y 64 bits. En el diseño x86, la mayoría de los compiladores de C ahora admiten precisión extendida de 80 bits a través del tipo long double , y esto se especificó en los estándares C99 / C11  (IEC 60559 aritmética de punto flotante (Anexo  F)). Los compiladores en x86 para otros lenguajes a menudo también admiten precisión extendida, a veces a través de extensiones no estándar: por ejemplo, Turbo Pascal ofrece un extendedtipo, y varios compiladores de Fortran tienen un REAL*10tipo (análogo a REAL*4y ). Dichos compiladores también suelen incluir subrutinasREAL*8 matemáticas de precisión extendida , como raíz cuadrada y funciones trigonométricas , en sus bibliotecas estándar .

Rango de funcionamiento

El formato de punto flotante de 80 bits tiene un rango (incluidos los subnormales ) desde aproximadamente 3,65 × 10 −4951 hasta 1,18 × 10+4932 .Aunque log 10 ( 2 64 ) ≈ 19.266 ,este formato se suele describir como que proporciona aproximadamente dieciocho dígitos significativos de precisión (el piso de log 10 ( 2 63 ) ,la precisión mínima garantizada). El uso de decimal cuando se habla de binario es desafortunado porque la mayoría de las fracciones decimales son secuencias recurrentes en binario, al igual quelo es en decimal. Por lo tanto, un valor como 10.15, se representa en binario como equivalente a 10.1499996185 etc. en decimal paraREAL*4pero 10.15000000000000035527 etc. enREAL*8: la interconversión implicará aproximación, excepto para aquellas pocas fracciones decimales que representan un valor binario exacto, como 0.625 . ParaREAL*10, la cadena decimal es 10.1499999999999999996530553 etc. El último 9 dígito es el decimoctavo dígito fraccionario y, por lo tanto, el vigésimo dígito significativo de la cadena. Los límites de conversión entre decimal y binario para el formato de 80 bits se pueden dar de la siguiente manera: Si una cadena decimal con como máximo 18 dígitos significativos se redondea correctamente a un valor de punto flotante binario IEEE 754 de 80 bits (como en la entrada) y luego se convierte de nuevo al mismo número de dígitos decimales significativos (como para la salida), entonces la cadena final coincidirá exactamente con la original; mientras que, por el contrario, si un valor de punto flotante binario IEEE 754 de 80 bits se convierte correctamente y se redondea (más cercano) a una cadena decimal con al menos 21 dígitos decimales significativos y luego se convierte de nuevo al formato binario, coincidirá exactamente con la original. [ 12 ] Estas aproximaciones son particularmente problemáticas cuando se especifica el mejor valor para las constantes en fórmulas con alta precisión, como podría calcularse mediantearitmética de precisión arbitraria.

Necesidad del formato de 80 bits

Un ejemplo notable de la necesidad de un mínimo de 64  bits de precisión en la mantisa del formato de precisión extendida es la necesidad de evitar la pérdida de precisión al realizar la exponenciación en valores de doble precisión . [ 26 ] [ 27 ] [ 28 ] [ c ] Las unidades de punto flotante x86 no proporcionan una instrucción que realice directamente la exponenciación : en su lugar, proporcionan un conjunto de instrucciones que un programa puede usar en secuencia para realizar la exponenciación usando la ecuación:

incógnitay=2 y  registro2(incógnita){\displaystyle x^{y}=2^{\ y\ \cdot \ \log _{2}(x)}}

Para evitar la pérdida de precisión, los resultados intermedios " log₂ ( x ) " e " y · log₂ ( x ) " deben calcularse con mucha mayor precisión, ya que tanto el exponente como la mantisa de x deben caber en el campo de la mantisa del resultado intermedio. Posteriormente, el campo de la mantisa del resultado intermedio se divide entre el exponente y la mantisa del resultado final al calcular el resultado intermedio 2. La siguiente sección describe este requisito con mayor detalle.

Con un pequeño desglose, un valor de doble precisión IEEE 754 se puede representar como:

2(1)s  mi  METRO {\displaystyle 2^{(-1)^{s}\ \cdot \ E}\ \cdot \ M\ }

donde s es el signo del exponente (0 o 1), E es el exponente insesgado, que es un entero que va de 0 a 1023, y M es la mantisa, que es un valor de 53 bits que cae en el rango 1 ≤ M < 2. Los números negativos y el cero pueden ignorarse porque el logaritmo de estos valores no está definido. Para los fines de esta discusión, M no tiene 53 bits de precisión porque está restringido a ser mayor o igual que uno, es decir, el bit oculto no cuenta para la precisión (Tenga en cuenta que en situaciones donde M es menor que 1, el valor es en realidad un valor desnormalizado y, por lo tanto, puede haber sufrido ya una pérdida de precisión. Esta situación está fuera del alcance de este artículo). 

Tomando el logaritmo de esta representación de un número de doble precisión y simplificando, se obtiene lo siguiente:

registro2(2(1)s  mi METRO)=(1)s  mi  registro2(2) + registro2(METRO)=± mi + registro2(METRO) {\displaystyle \log _{2}(2^{(-1)^{s}\ \cdot \ E}\ \cdot \,M)=(-1)^{s}\ \cdot \ E\ \cdot \ \log _{2}(2)\ +\ \log _{2}(M)=\pm \ E\ +\ \log _{2}(M)\ }

Este resultado demuestra que al tomar  el logaritmo en base 2 de un número, el signo del exponente del valor original se convierte en el signo del logaritmo, el exponente del valor original se convierte en la parte entera de la mantisa del logaritmo, y la mantisa del valor original se transforma en la parte fraccionaria de la mantisa del logaritmo.

Debido a que E es un entero en el rango de 0 a 1023, se necesitan hasta 10  bits a la izquierda del punto decimal para representar la parte entera del logaritmo. Debido a que M cae en el rango 1 ≤ M < 2 , el valor de log₂M caerá en el rango 0 ≤ log₂M < 1 , por lo que se necesitan al menos 52 bits a la derecha del punto decimal para representar la parte fraccionaria del logaritmo. Combinar 10 bits a la izquierda del punto decimal con 52 bits a la derecha del punto decimal significa que la parte mantisa del logaritmo debe calcularse con al menos 62 bits de precisión. En la práctica, los valores de M menores que     2  {\displaystyle \ {\sqrt {2\ }}\ }requieren 53  bits a la derecha del punto de base y valores de M menores que 2 4 {\displaystyle \ {\sqrt[{4}]{2\ }}\ }Se requieren 54  bits a la derecha del punto decimal para evitar la pérdida de precisión. Para equilibrar este requisito de precisión adicional a la derecha del punto decimal, los exponentes menores de 512 solo requieren 9  bits a la izquierda del punto decimal y los exponentes menores de 256 solo requieren 8  bits a la izquierda del punto decimal.

La parte final del cálculo de la exponenciación consiste en obtener un resultado intermedio . Este resultado intermedio se compone de una parte entera " I " y una parte fraccionaria " F ". Si el resultado intermedio es negativo, se requiere un pequeño ajuste para obtener una parte fraccionaria positiva, ya que tanto " I " como " F " son números negativos.

Para obtener resultados intermedios positivos:

 2inortetmirmetromidiatmi rmislt=2I+F=2I 2F {\displaystyle \ 2^{\mathsf {resultado\ intermedio}}=2^{I+F}=2^{I}\ 2^{F}\ }

Para resultados intermedios negativos:

 2inortetmirmetromidiatmi rmislt=2I+F=2I + (11) + F=2(I1) + (F+1)=2I1 2F+1 {\displaystyle \ 2^{\mathrm {resultado\ intermedio} }=2^{I+F}=2^{I\ +\ (1-1)\ +\ F}=2^{(I-1)\ +\ (F+1)}=2^{I-1}\ 2^{F+1}\ }

Así , la parte entera del resultado intermedio (" I " o " I − 1 ") más un sesgo se convierte en el exponente del resultado final, y la parte fraccionaria positiva transformada del resultado intermedio, 2F o 2F + 1, se convierte en la mantisa del resultado final. Para proporcionar 52 bits de precisión al resultado final, la parte fraccionaria positiva debe mantenerse en al menos 52 bits.  

En conclusión, el número exacto de bits de precisión necesarios en la mantisa del resultado intermedio depende en cierta medida de los datos, pero 64  bits son suficientes para evitar la pérdida de precisión en la gran mayoría de los cálculos de exponenciación que involucran números de doble precisión .

El número de bits necesarios para el exponente del formato de precisión extendida se deriva del requisito de que el producto de dos números de doble precisión no se desborde al calcularse con dicho formato. El mayor exponente posible de un valor de doble precisión es 1023, por lo que el exponente del mayor producto posible de dos números de doble precisión es 2047 (un valor de 11 bits). Si se añade un margen para tener en cuenta los exponentes negativos, el campo del exponente debe tener al menos 12  bits de ancho.

La combinación de estos requisitos (1  bit para el signo, 12  bits para el exponente sesgado y 64  bits para la mantisa) implica que el formato de precisión extendida necesitaría al menos 77  bits. Las consideraciones de ingeniería dieron como resultado la definición final del formato de 80 bits (en particular, el  estándar IEEE 754 exige que el rango del exponente de un formato de precisión extendida coincida con el del siguiente formato de precisión más grande, el formato de precisión cuádruple , que es de 15  bits). [ 27 ]

Otro ejemplo de cálculos que se benefician de la aritmética de precisión extendida son los esquemas de refinamiento iterativo , utilizados para limpiar indirectamente los errores acumulados en la solución directa durante la gran cantidad de cálculos que se realizan habitualmente en el álgebra lineal numérica. [ 30 ]

Soporte de idiomas

  • Algunas implementaciones de C / C++ (por ejemplo, GNU Compiler Collection (GCC), Clang , Intel C++ ) implementan long doubleel uso de números de coma flotante de 80 bits en sistemas x86. Sin embargo, este comportamiento depende de la implementación y no es obligatorio, pero está permitido por el estándar, tal como se especifica para el  hardware IEEE 754 en el estándar C99  "Anexo F IEC  60559 aritmética de coma flotante". GCC también proporciona __float80tipos __float128. [ 31 ]
  • Algunas implementaciones de Common Lisp (por ejemplo, CMU Common Lisp , Embeddable Common Lisp ) se implementan long-floatutilizando números de punto flotante de 80 bits en sistemas x86.
  • El lenguaje de programación Dreal utiliza el tamaño de coma flotante más grande implementado en el hardware, por ejemplo, 80  bits para las CPU x86 . En otras máquinas, se utilizará el tipo de coma flotante más amplio compatible de forma nativa con la CPU, o la precisión doble de 64 bits, lo que sea mayor.
  • Turbo Pascal (y Object Pascal o Delphi ) tiene un extendedtipo de 80 bits disponible además de real/ single(32  bits) y double(64  bits), ya sea de forma nativa (cuando hay un coprocesador 80x87 presente) o emulado (a través de la biblioteca Turbo87); este extendedtipo está disponible en plataformas de 16, 32 y 64 bits, posiblemente con relleno . [ 32 ]
  • El sistema de ejecución de Racket proporciona el tipo de datos extflonum de 80 bits en sistemas x86.
  • La biblioteca estándar de SwiftFloat80 proporciona el tipo de dato.
  • El compilador PowerBASIC BASIC proporciona EXTun EXTENDEDtipo de datos de punto flotante de precisión extendida de 10 bytes.
  • Algunas versiones de BBC BASIC , en particular BBC BASIC para Windows y BBC BASIC para SDL 2.0 , admiten números de coma flotante de precisión extendida de 10 bytes cuando se ejecutan en una CPU x86.
  • Zig ofrece un tipo f80 desde la versión 0.10.0.

Véase también

Notas a pie de página

  1. "Este formato está pensado principalmente para ayudar a los programadores a mejorar la integridad de su software simple y doble, y para atenuar la degradación por redondeo en cálculos de matrices dobles de dimensiones mayores, y puede utilizarse fácilmente de tal manera que sustituir la matriz cuádruple por la extendida nunca invalide su uso." — Diseñador de x87 W. Kahan [ 13 ]
  2. "Los lenguajes de alto nivel utilizarán extended (de forma invisible) para evaluar subexpresiones intermedias, y posteriormente podrán proporcionar extended como un tipo de dato declarable." [ 16 ] : 70
  3. "La presencia de al menos tantos bits adicionales de precisión en el formato extendido como en el campo del exponente del formato básico que admite simplifica enormemente el cálculo preciso de las funciones trascendentales, los productos internos y la función potencia y x ." [ 29 ] : 70

Referencias

  1. IEEE 754 (2008 , ¶ 2.1.21) define el formato de precisión extendida como "Un formato que extiende un formato básico compatible al proporcionar mayor precisión y rango". 
  2. Francis, CG (11 de febrero de 1965). «IBM presenta una potente computadora pequeña» . Director de Información (Comunicado de prensa). White Plains, Nueva York : International Business Machines Corporation (IBM). Archivado del original el 5 de julio de 2019.
  3. Biblioteca de subrutinas (PDF) . IBM 1130 (9.ª ed.). IBM Corporation. 1974. pág. 93.  
  4. Principios de funcionamiento . IBM System/360 (9.ª ed.). IBM Corporation. 1970. pág. 41.  
  5. Principios de funcionamiento del sistema IBM/370 (7.ª ed.). IBM Corporation. 1980. págs. 9-2 – 9-3 .  
  6. Steil, Michael (2008-10-20). "Crea tu propia versión de Microsoft BASIC para 6502" . pagetable.com . pág. 46. Archivado del original el 30-05-2016 . Recuperado el 30-05-2016 . 
  7. IEEE Computer Society (29 de agosto de 2008). Norma IEEE para aritmética de punto flotante (Informe). IEEE. §3.7. doi : 10.1109/IEEESTD.2008.4610935 . ISBN 978-0-7381-5752-8Norma IEEE 754-2008.
  8. Brewer, Kevin. "Informe de Kevin" . Material de referencia IEEE-754 . Consultado el 19 de febrero de 2012 .
  9. Familia Motorola MC68000 (PDF) . Manual de referencia del programador. NXP Semiconductors. 1992. págs. 1–16 , 1–18 , 1–23 . 
  10. Familia ColdFire (PDF) . Manual de referencia para programadores. Freescale Semiconductor. 2005. pág. 7 - 7. 
  11. "Hoja de datos FPA10" (PDF) . chrisacorns.computinghistory.org.uk . GEC Plessey Semiconductors. 11 de junio de 1993. Consultado el 26 de noviembre de 2020 .
  12. 1 2 Kahan, William (1 de octubre de 1997). "Notas de clase sobre el estado de la norma IEEE 754 para aritmética de punto flotante binario" (PDF) . 
  13. Kahan, William (1 de octubre de 1997). "Notas de clase sobre el estado de la norma IEEE 754 para aritmética de punto flotante binario" (PDF) . pág. 5.  
  14. Einarsson, Bo (2005). Precisión y fiabilidad en la computación científica . SIAM. págs. 9 y ss. ISBN  978-0-89871-815-7. Consultado el 3 de mayo de 2013 .
  15. "Arquitecturas Intel 64 e IA-32" . Manual del desarrollador de software. Intel Corp. Marzo de 2012. §8.2. 
  16. Coonen, Jerome T. (enero de 1980). "Una guía de implementación para un estándar propuesto para la aritmética de punto flotante". IEEE Computer . 13 : 68–79 . doi : 10.1109/MC.1980.1653344 . S2CID 206445847 . 
  17. Kahan, William (22 de noviembre de 1983). "Matemáticas escritas en arena: el hp-15C, Intel 8087, etc." (PDF) .
  18. Goldberg, David (marzo de 1991). "Lo que todo científico informático debería saber sobre la aritmética de punto flotante" (PDF) . ACM Computing Surveys . 23 (1): 192. doi : 10.1145/103162.103163 . S2CID 222008826 . 
  19. Higham, Nicholas (2002). "Diseño de algoritmos estables". Precisión y estabilidad de los algoritmos numéricos (2.ª ed.). Sociedad de Matemáticas Industriales y Aplicadas (SIAM). pág. 43.  
  20. 80C187 Coprocesador matemático de 80 bits (PDF) (hoja de datos). Intel Corporation . Noviembre de 1992. pág. 4. Consultado el 24 de agosto de 2024 . 
  21. Manual del desarrollador de las arquitecturas Intel 64 e IA-32 (PDF) . Vol. 1: Arquitectura básica. Intel Corporation . Junio ​​de 2024. §4.2.2 Tipos de datos de punto flotante, §4.8 Números reales y formatos de punto flotante . Consultado el 24 de agosto de 2024 .   Otros volúmenes están disponibles en los manuales para desarrolladores de software de las arquitecturas Intel 64 e IA-32 .
  22. Palmer, John F.; Morse, Stephen P. (1984). The 8087 Primer . Wiley Press. pp. 14. ISBN  0-471-87569-4.
  23. Morse, Stephen P.; Albert, Douglas J. (1986). La arquitectura 80286. Wiley Press. págs. 91–111 . ISBN  0-471-83185-9.
  24. Manual del desarrollador de las arquitecturas Intel 64 e IA-32 (Informe). Vol. 1. Intel Corporation . págs. 8-21 a 8-22.   
  25. Severance, Charles (20 de febrero de 1998). "Una entrevista con el viejo de la coma flotante" . eecs.berkeley.edu . UC Berkeley .
  26. Palmer, John F.; Morse, Stephen P. (1984). The 8087 Primer . Wiley Press. pp. 16. ISBN  0-471-87569-4.
  27. 1 2 Morse, Stephen P.; Albert, Douglas J. (1986). La arquitectura 80286. Wiley Press. págs. 96-98 . ISBN   0-471-83185-9.
  28. Hough, David (marzo de 1981). "Aplicaciones del estándar IEEE 754 propuesto para aritmética de punto flotante". IEEE Computer . 14 (3): 70– 74. doi : 10.1109/CM.1981.220381 . S2CID 14645749 .  
  29. Coonen, Jerome T. (enero de 1980). "Una guía de implementación para un estándar propuesto para la aritmética de punto flotante". IEEE Computer : 68–79 . doi : 10.1109/MC.1980.1653344 . S2CID 206445847 . 
  30. Demmel, James ; Hida, Yozo; Kahan, William ; Li, Xiaoye S .; Mukherjee, Sonil; Riedy, E. Jason (junio de 2006). "Límites de error a partir del refinamiento iterativo extra preciso" (PDF) . ACM Transactions on Mathematical Software . 32 (2): 325–351 . doi : 10.1145/1141885.1141894 . S2CID 1340891. Recuperado el 18 de abril de 2014 . 
  31. "Tipos flotantes (usando la colección del compilador GNU (GCC))" .
  32. "El tipo de datos extendido es diferente en diferentes plataformas" .