Intel 8087: el microcódigo detrás de la coma flotante

¿Qué era el Intel 8087 y por qué importaba?

En 1980, Intel presentó el 8087, un coprocesador que hacía las operaciones de coma flotante mucho más rápidas en el IBM PC y en otros sistemas de la época. La mejora frente al 8086 fue de casi 100 veces en una simple suma, y todavía mayor en operaciones como raíces cuadradas o logaritmos. Cualquiera que haya peleado con el rendimiento de un cálculo numérico en producción entiende el tamaño de esa diferencia.

Para dimensionarlo: según Wikipedia, el IBM PC se lanzó en agosto de 1981 con un precio inicial de 1.565 dólares, y su placa madre incluía un zócalo vacío que IBM describía como zócalo de procesador auxiliar, cuyo uso más evidente era justamente montar el 8087. Dejar el hueco preparado en el diseño es la razón por la que el chip llegó a los escritorios donde se usaba CAD y hojas de cálculo con carga numérica.

¿Cómo suma y resta un chip en coma flotante?

Los enteros no alcanzan: un entero de 32 bits llega a unos 2.000 millones, y las aplicaciones necesitan decimales. Por eso los ordenadores usan coma flotante, donde un número se representa como signo por significando por 2 elevado al exponente. El significando es binario y tiene la forma 1.bbb…, así que 1,1 en binario equivale a 1,5 en decimal.

¿Y esto cómo se aplica en tu negocio?

En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.

👥 Probar 7 días

Sumar no es un solo paso. Primero hay que alinear los puntos binarios, igual que se alinean los decimales a mano: el argumento con el exponente menor se desplaza a la derecha hasta igualar los exponentes. Después se suman los significandos con aritmética entera. Y al final el resultado se normaliza, porque puede aparecer un bit extra por desbordamiento.

La resta añade sus propios problemas. El resultado puede ser positivo, negativo o cero, y puede ser muchísimo menor que los argumentos, lo que obliga a desplazamientos grandes. En el ejemplo clásico de 8 menos 7,5, tras alinear y restar hay que desplazar cuatro bits a la izquierda y decrementar el exponente en 4. Si el resultado sale negativo, se hace positivo el significando y se invierte el signo. Si sale cero, no se puede normalizar y se devuelve un +0 o un −0 según corresponda.

El hardware que lo hace posible: sumador, shifter y detector de ceros

Internamente el 8087 guarda todo en un formato de 80 bits llamado temporary real: 1 bit de signo, 15 bits de exponente y 64 bits de significando. El exponente se almacena con un sesgo de 16.383 para que nunca sea negativo. La ROM de microcódigo contiene 1.648 microinstrucciones, y cada microinstrucción de 16 bits ejecuta una sola operación de bajo nivel.

El corazón es un sumador entero de 69 bits. Tiene más de 64 porque incluye tres bits de redondeo y un par de bits altos para desbordamiento. Una suma entera consume dos microinstrucciones: la primera fija el primer argumento y las opciones de acarreo y redondeo, el resultado queda en un registro dedicado, y la segunda lo mueve al destino.

El shifter, que desplaza valores de 68 bits cualquier cantidad de posiciones hacia la izquierda o la derecha, ocupa mucho espacio en el die porque es lo que más se usa para alinear valores. El circuito de ceros iniciales cuenta cuántos ceros hay a la izquierda para saber cuánto desplazar. Para mantener el circuito manejable, el chip lo hace en dos pasadas: primero cuenta bytes con ceros iniciales y después los bits restantes, que ya son entre 0 y 7.

¿Por qué el microcódigo del 8087 es tan complicado?

Porque el chip intenta hacer lo correcto con infinitos, ceros, valores no numéricos (NaN) y números desnormalizados. El microcódigo común a suma, resta, multiplicación y división tiene 18 bifurcaciones condicionales seguidas, casi código espagueti, solo para cubrir casos especiales. Hay ocho caminos que devuelven NaN y ocho que devuelven infinito.

Un ejemplo ilustrativo: el 8087 distingue entre cierre afín, donde +∞ y −∞ son valores distintos, y cierre proyectivo, donde el infinito no tiene signo. En modo afín, ∞+∞ da infinito positivo, pero ∞−∞ devuelve NaN porque cualquier respuesta sería arbitraria. La multiplicación y la división pueden cambiar el signo de un infinito; la suma y la resta, no.

Cuando el resultado es cero, el microcódigo tiene que decidir si es +0 o −0. La lógica es la esperable de un cero que se inclina hacia un lado, pero cuando los ceros se cancelan, por ejemplo en +0 más −0, el modo de redondeo decide: redondeo hacia abajo devuelve −0 y el resto de los modos devuelve +0.

De la 8087 a la IEEE 754: el legado que sigue corriendo en tu GPU

La conclusión del análisis es que el 8087 fue el origen de la IEEE 754, el estándar de coma flotante que usan los ordenadores actuales. No todo lo que traía el chip sobrevivió: el infinito proyectivo, los unnormals y el pseudo-cero se quedaron fuera del estándar porque no valían el esfuerzo.

El trabajo es parte de una serie más amplia de Ken Shirriff junto al colectivo Opcode Collective, que convirtió las imágenes de la ROM en datos de microcódigo. Según Hackaday, el mismo equipo analizó otras rutinas del chip, como la función tangente, que combina CORDIC con una aproximación polinómica de Padé para llegar a 64 bits de precisión. Con la familia Pentium, Intel abandonó CORDIC por completo, y con la llegada de las instrucciones SIMD el conjunto x87 fue perdiendo protagonismo.

¿Qué significa esto para tu startup?

Es tentador leer esto como arqueología. No lo es. Cada vez que entrenas un modelo, calculas una métrica financiera o corres una simulación, estás usando las reglas que este chip ayudó a fijar: cómo se redondea, cómo se representa el cero, qué pasa cuando un valor se desborda. Los equipos que construyen producto sobre cómputo numérico heredan esas decisiones, las entiendan o no.

Tres lecciones se traducen directo a producto:

  • Los casos borde se comen el presupuesto. La ruta feliz del 8087 son unas pocas microinstrucciones; el manejo de infinitos, NaN y ceros con signo ocupa buena parte del diseño. Si tu roadmap no reserva tiempo para definir qué hace tu producto en los límites, lo vas a descubrir con un cliente enfadado.
  • Optimiza la ruta caliente y documenta por qué. El shifter ocupa mucha superficie del chip porque es lo que más se ejecuta. Haz el ejercicio inverso: perfila, encuentra la operación que se repite millones de veces y justifica ahí la inversión de ingeniería.
  • Escribe el comportamiento, no solo el código. El 8087 fijó sus rarezas en documentación y después en un estándar. Traduce tus decisiones de redondeo, precisión y manejo de nulos a una especificación corta que tu equipo pueda leer y testear.

Fuentes

¿Y esto cómo se aplica en tu negocio?

En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.

👥 Probar 7 días

Daily Shot: Tu ventaja táctica

Lo que pasó en las últimas 24 horas, resumido para que tú no tengas que filtrarlo.

Suscríbete para recibir cada mañana la curaduría definitiva del ecosistema startup e inversionista. Sin ruido ni rodeos, solo la información estratégica que necesitas para avanzar:

  • Venture Capital & Inversiones: Rondas, fondos y movimientos de capital.
  • IA & Tecnología: Tendencias, Web3 y herramientas de automatización.
  • Modelos de Negocio: Actualidad en SaaS, Fintech y Cripto.
  • Propósito: Erradicar el estancamiento informativo dándote claridad desde tu primer café.

📡 El Daily Shot Startupero

Noticias del ecosistema startup en 2 minutos. Gratis, todos los días.

Share to...