Error de división del Intel Pentium
# Error de división del Intel Pentium

## Introducción

El 30 de octubre de 1994 el profesor Thomas Nicely de la Universidad de Lynchburg descubrió un error en la unidad de coma flotante del Intel Pentium. Nicely observó que algunas operaciones de división devolvían siempre un valor erróneo por exceso. Otras personas confirmaron rápidamente estos errores en las divisiones. Este fallo de diseño se hizo notorio muy rápidamente y se le dio el nombre de error FDIV del Pentium (FDIV es la instrucción de división en coma flotante de los microprocesadores x86). Otros pusieron de relieve problemas de división cuyo resultado devuelto por el Pentium tenía un error de hasta 61 unidades por millón.

## Repercusiones

Estas comprobaciones crearon una gran polémica. Intel negó inicialmente la existencia del problema. Más tarde, Intel remarcó la insignificancia de los defectos de sus microprocesadores, queriendo tranquilizar a los usuarios. Intel se negó a sustituir sistemáticamente los microprocesadores defectuosos; sin embargo, si una persona podía demostrar que había sido afectada por el error, entonces Intel procedería a cambiar su procesador. Aunque evaluaciones efectuadas por organismos independientes mostraron la poca importancia de las consecuencias de error y que el efecto era desdeñable en la mayoría de las ocasiones, se provocó una situación en la que los usuarios de Intel Pentium demandaban el reemplazo de los procesadores defectuosos. Empresas como IBM se unieron a la denuncia. Al final, Intel se vio forzada a aceptar sustituir todos los microprocesadores defectuosos, lo que le representó un costo enorme.

## Modelos afectados

El problema ocurre solo en algunos modelos el procesador Pentium original. El bug solo existe en algunos procesadores de la familia Pentium con una velocidad de reloj menor a 120 MHz. En los modelos afectados la aplicación Intel Processor Frequency ID verifica la presencia del error.

Los diez procesadores afectados se listan a continuación.

Pentium P5 800 nm 5V :

| Familia | Modelo | Versión | Ver. Núcleo | Vel. Reloj | Veloc. FSB | S-spec |
| - | - | - | - | - | - | - |
| 5 | 1 | 3 | B1 | 60 MHz | 60 MHz | Q0352, Q0412, SX753 |
| 5 | 1 | 3 | B1 | 66 MHz | 66 MHz | Q0353, Q0413, SX754 |
| 5 | 1 | 5 | C1 | 60 MHz | 60 MHz | Q0466, SX835, SZ949 |
| 5 | 1 | 5 | C1 | 66 MHz | 66 MHz | Q0467, SX837, SZ950 |

Pentium P54C 600 nm 3,3V :

| Family | Model | Versión | Ver. Núcleo | Vel. Reloj | Veloc. FSB | S-spec |
| - | - | - | - | - | - | - |
| 5 | 2 | 1 | B1 | 75 MHz | 50 MHz | Q0601 |
| 5 | 2 | 1 | B1 | 90 MHz | 60 MHz | Q0542, Q0613, Q0543, SX879, SX885, SX909, SX874 |
| 5 | 2 | 1 | B1 | 100 MHz | 66 MHz | Q0563, Q0587, Q0614, SX886, SX910 |
| 5 | 2 | 2 | B3 | 75 MHz | 50 MHz | Q0606, SX951 |
| 5 | 2 | 2 | B3 | 90 MHz | 60 MHz | Q0628, Q0611, Q0612, SX923, SX922, SX921, SX942, SX943, SX944, SZ951 |
| 5 | 2 | 2 | B3 | 100 MHz | 66 MHz | Q0677, SX960 |

## Comprobación del error

El fallo estaba presente tan solo en algunos modelos del procesador Pentium. Todos los modelos de procesador de familia Pentium que funcionan a una frecuencia de reloj de por lo menos 120 MHz tienen el error corregido.

El siguiente código en BASIC indica si el procesador del ordenador donde se ejecuta tiene el error de división del Pentium.

También se puede realizar el cálculo desde la calculadora de Windows o desde una planilla de cálculo. El valor correcto es

    $\textstyle {\frac {4.195.835}{3.145.727}}=1,333820449136241002$

La conversión a hexadecimal por el procesador es 4.195.835 = 0x4005FB y 3.145.727 = 0x2FFFFF. El '5' en 0x4005 causa un error en la lógica de control de la FPU. Como resultado, el valor devuelto por un Pentium con error es incorrecto a más de 4 dígitos:

    $\textstyle {\frac {4.195.835}{3.145.727}}=1,333{\color {Red}{739068902037589}}$

Otra forma de detectar el error es usando la utilidad pentnt incluida con Windows NT 3.51, NT 4.0, 2000 y XP.

