El bug del Pentium

Procesador Intel Pentium

Procesador Intel Pentium

Procesador Intel Pentium
Procesador Intel Pentium

Escuchando el podcast nº9 de MS-DOS Club durante la parte del MOD de Chiquito para Doom uno de los creadores del mismo mencionaba haber tenido un Pentium 60 con el famoso bug del Pentium. Bueno, famoso… como son famosas estas cosas. En su momento se levantó mucho revuelo y una vez pasado ni Dios se acuerda casi de ello. Pero el caso es que creo que la historia es curiosa, lo suficiente al menos para motivarme a escribir este pequeño artículo.

Como siempre, lo primero es ponerse un poco en perspectiva. Estamos en el año 1994, la plataforma PC se ha convertido en la hegemónica. Uno tras otro, los rivales o se han reconvertido en fabricantes de PC (como HP, Tandy, Epson…) o están sucumbiendo (como Commodore, DEC…). El estándar, con todas sus deficiencias, se había zampado incluso a su propio padre. IBM, la otrora topoderosa IBM, había vuelto con el rabo entre las piernas al PC estándar tras intentar redirigir la industria hacia otras aguas más protegidas por copyright.

Realmente, sabemos cómo acabó todo aquello. Las bases del binomio Wintel que dominaría la industria con puño de hierro hasta la explosión del fenómeno smartphone ya estaban sembradas, pero en 1994 parecían mucho menos sólidas de lo que de verdad eran. Varias amenazas se cernían tanto sobre Microsoft como sobre Intel, aunque como sabemos resultaron ser meros espejismos.

Sistema operativo OS/2
Inicio del OS/2 2.1

La parte de Microsoft era quizá la que parecía más atacada. Windows Chicago, el futuro Windows 4.0 heredero del exitoso Windows 3.0, no paraba de acumular retrasos. IBM estaba decidida a potenciar OS/2 como gran alternativa a Windows, no sólo en mercados empresariales sino también en el doméstico. Por si fuera poco, tanto Digital Research como la propia IBM seguían sacando nuevas versiones de DR-DOS y PC-DOS, y aunque Microsoft prometía no abandonar a los usuarios del viejo DOS la verdad es que salvo la revisión -muy- menor de 6.22 no volveríamos a ver un MS-DOS como producto independiente nunca más.

 

En el terreno del hardware la cosa estaba más calmada. Intel, por supuesto, tenía competencia. Tanto AMD como Cyrix tenían procesadores compatibles con sus 386 y 486, aunque ninguno de ellos había sacado aún una alternativa al Pentium, que aunque bastante caro aún en 1994 ya llevaba desde marzo del 93 en el mercado y en x86 nada le hacía sombra en cuanto a potencia.

Power Macintosh 6100
Power Macintosh 6100 con procesador PowerPC

De hecho, en el cuarto trimestre de 1994 la principal amenaza que se veía a los Pentium venían de la mano de Apple, Motorola e IBM. Juntas, habían desarrollado la plataforma PowerPC, un procesador de arquitectura RISC y que iba a gobernar los Macintosh. Las revistas de la época, incluso las dedicadas exclusivamente a PC, se hacían bastante eco de estos procesadores, y tras la salida de los primeros Power Macintosh con el PowerPC 601 se veían numerosas comparativas. Por supuesto, se rumoreaba sobre una línea de ordenadores IBM con PowerPC y OS/2 -de hecho, Windows NT 3.51 también tiene versión para PowerPC-, e incluso nuevos Amiga, aunque Commodore ya había quebrado.

 

Y, con todo esto, saltó la noticia.

Thomas Nicely
Foto de Thomas Nicely

Thomas Nicely, un profesor de matemáticas, se había dado cuenta de algunas inconsistencias en los resultados de algunos programas que había desarrollado, dando resultados distintos según el ordenador en que se ejecutasen. Este problema lo detectó al utilizar los nuevos ordenadores disponibles con chips Pentium. Tirando del hilo comprobó que el problema estaba en el lado del procesador, de forma que los Pentium tenían un error en la operación FDIV, es decir, división en coma flotante.

 

No es cuestión de ponerse muy técnico, así que para entender el problema, digamos que un procesador trae una serie de instrucciones para operar con los datos. Cada arquitectura de procesador tiene la suya propia, y en el caso de la x86 una de ellas es la de división de dos números en coma flotante -los Motorola 68k, por ejemplo, no la tienen.

¿Y qué es un número en coma flotante? Pues un número con decimales, y se llaman de coma flotante porque el número de decimales que manejan no es fijo, depende del número. 10.5 tiene un decimal, pero 10.52 tiene dos decimales, y 10.050055034 tiene 9 decimales.

Si el número de decimales es fijo, como por ejemplo en el campo financiero, se suelen usar operaciones enteras que son más rápidas y simples. Por ejemplo, si trabajamos con euros y céntimos, podemos tener dos decimales, de forma que 0,01 € se represente como 1, 1 € sea 100 y 12,30 € sean 1230.

Pero si a priori no sabes con cuántos decimales vas a trabajar se utiliza una forma de almacenar en memoria los números que se parece bastante a la notación científica, donde 2 no es 2 sino 2.0×10^0,  25 no es 25 sino 2.5×10^1 y 0,05 es 5.0×10^-2.

Pues bien, el ejemplo de la Wikipedia creo que es suficientemente indicativo para ver en qué consistía el error:

4,195,835 / 3,145,727 = 1.333820449136241002 <- Resultado correcto

4,195,835 / 3,145,727 = 1.333739068902037589<- Resultado obtenido con un Pentium con el bug

Es decir, simplificando, que los primeros Pentium no redondeaban bien al dividir números con resultado no exacto.

Pero… ¿hasta qué punto este error de redondeo es chungo? Bueno… esa es la cuestión. Para cualquier otro usuario de la primera mitad de los 90 que no se dedicase a CAD, cálculos trigonométricos y similares, posiblemente nunca se viene afectado por este error en la vida útil del ordenador -recordemos además que entonces la vigencia de un ordenador se calculaba en 2 o 3 años-, pero todo aquello se amplificó sobremanera.

Yo por aquellos entonces compraba varias revistas de informática, y en PC Actual le dieron bastante cobertura a este problema. He estado buscando la revista y me ha sido imposible encontrarla, pero recuerdo -y ahí viene el problema, hablo de memoria-, de estudios que decían que un puente diseñado utilizando un programa de CAD y un Pentium podría caerse.

Logo Intel
Intel, la fabricante del procesador Pentium

La respuesta a todo esto de Intel fue al principio negarlo todo. Después reconoció el problema pero lo minimizó, indicando que nadie o casi nadie lo iba siquiera a notar, no digamos ya a verse afectado por un error tan nimio. Llegó a ofrecer cambiar gratuitamente el procesador en el caso de que alguien pudiera demostrar que se había visto afectado por el problema, pero se negó a cambiar todos los procesadores de forma sistemática. Esto provocó una demanda colectiva de usuarios con el chip con bug, la cual cobró bastante fuerza cuando IBM se unió a la misma, amenazando con dejar de vender ordenadores con Pentium hasta que el problema fuese solucionado.

Ignoro si IBM llegó a cumplir realmente la amenaza, pero recordemos el momento histórico en el que se estaba, la IBM de 1994 no tenía nada que ver con el juggernaut que era tan sólo diez años antes, pero las tres siglas de su nombre seguían imponiendo mucho respeto y parecía -sólo parecía- que podía ofrecer una alternativa real al monopolio Wintel.

Ante el cariz que iba tomando el tema, Intel finalmente claudicó y ofreció un plan de reemplazo de todos los procesadores afectados por el bug, lo que a nivel contable significó una provisión de $475 millones (los ingresos de la compañía en 1994 fueron de $11.541 millones, es decir, un 4,12% de todos los ingresos de ese año). Por si no estáis muy familiarizados con estos términos, significa que la empresa cuantificó en $475 millones lo que le iba a costar la broma. Que luego coincidiera o no la cifra ya es otra cosa, aunque se supone que estas cosas van auditadas…

Para terminar, recuerdo en aquel momento leer una editorial de la revista PC Actual -¿o era en el artículo del Pentium? Demasiados años ya- . En ella, se comentaba que Intel podría haber enviado en el diskette que enviaba para ver si tu Pentium tenía el bug una actualización del microcódigo del procesador, pero que era algo tan delicado que no se habían atrevido a hacerlo, porque estaban seguros de que si lo hubieran hecho los creadores de virus habrían aprendido a reprogramar microprocesadores mediante software y… ya para qué querríamos más. Ignoro si algo así podría hacerse desde un diskette, si alguien sabe más sobre esto, que lo diga.

Y por último, como bonus track del artículo, un chiste de la época que siempre me hizo mucha gracia. ¿Por qué Intel después del 286, el 386 y el 486, llamó al 586 Pentium? Porque tras terminarlo hicieron 486+100 y les dio 585,9999998999712388278

4 pensamientos sobre “El bug del Pentium

  1. Genial artículo.
    Maravillosa firma de ponernos en situación histórica y plantear el problema del cole flotante.
    Lo de win311 para PowerPC no lo tenía en mente y eso que me siguen pareciendo los mejores procesadores que ha habido (de WinCE para para PowerPC so era consciente, gracias a eso funciona mi DREAMCAST y su sistema anticopia y de bloqueo de Homebrew es tan lamentable).
    Creía no recordar está noticia hasta escucharlo en el programa y seguía convencido de ello mientras leía el artículo, pero el chiste me ha hecho volver atrás en el tiempo y me he visto a mi mismo explicándolo (pero ahora lo pillo de verdad jajaja).

    1. No, Win 3.11 no estaba para PowerPC. A fin de cuentas, este Windows fue diseñado para ejecutarse encima del DOS y el DOS sólo corría en x86. El que sí tuvo versión fue Windows NT 3.51. Pero es que Windows NT fue diseñado para poder funcionar en varios tipos de procesador, a diferencia del DOS/Windows clásico.

      En cualquier caso, muchas gracias por tus palabras 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *