Error de divisió del Pentium

De Viquipèdia
Salta a: navegació, cerca
Intel Pentium 66MHz (sSpec=SX837) amb l'error FDIV.

El 30 d'octubre de 1994 el professor Thomas Nicely de la Universitat de Lynchburg va descobrir un bug en la unitat de coma flotant del Intel Pentium. Es va adonar que algunes operacions de divisió retornaven sempre un valor erroni per excés. Altres persones van confirmar ràpidament aquests errors en les divisions. Aquest error es va fer notori molt ràpidament i se li va donar el nom d'error FDIV del Pentium (FDIV és la instrucció de divisió en coma flotant dels microprocessadors x86). Uns altres van posar en relleu problemes de divisió el resultat retornat de la qual pel Pentium tenia un error de fins a 61 unitats per milió. Tots els processadors de família Pentium que tinguen una freqüència de rellotge de més de 100 MHz tenen l'error corregit.

Models afectats[modifica | modifica el codi]

El problema passa amb només alguns models del processador Pentium. Qualsevol processador amb una velocitat de rellotge d'almenys 120 MHz és suficientment nou per no tindre l'error. En els models afectats, el programa: Intel Processor Frequency ID Utility és capaç de detectar l'error.

Els deu models afectats són llistats seguidament:

Pentium P5 800 nm 5V
Family Model Stepping Core stepping Clock rate FSB speed 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 Stepping Core stepping Clock rate FSB speed 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

Repercussions[modifica | modifica el codi]

Aquestes comprovacions van crear una gran polèmica. Intel va negar inicialment l'existència del problema. Més tard, Intel va remarcar la insignificança dels defectes dels seus microprocessadors, volent tranquil·litzar als usuaris. Intel es va negar a substituir sistemàticament als microprocessadors defectuosos; no obstant això, si una persona podia demostrar que havia estat afectada per l'error, llavors Intel procediria a canviar el seu processador. Encara que avaluacions efectuades per organismes independents van mostrar la poca importància de les conseqüències d'error i que l'efecte era menyspreable en la majoria de les ocasions, es va provocar una situació en la qual els usuaris de Intel Pentium demandaven el canvi dels processadors defectuosos. Empreses com IBM es van unir a la denúncia. Finalment, Intel es va veure forçada a acceptar substituir tots els processadors defectuosos, el que li va representar un cost enorme. Aquells que disposen d'una unitat d'aquest tipus encara poden posar-se en contacte amb Intel perquè la hi canvie.

Comprovació de l'error[modifica | modifica el codi]

El següent codi en BASIC permet saber si el vostre processador té l'error de divisió.

x = 8391667.0
y = 1572863.0

IF x - (x / y) * y <> 0 THEN 
PRINT "El vostre processador té l'error de divisió del Pentium." 
ELSE
PRINT "El vostre processador no té l'error de divisió del Pentium." 
END IF

Una altra forma de detectar l'error és mitjançant la operació següent amb qualsevol programa que nativament utilitzi nombres de coma flotant, com Windows Calculator or Microsoft Excel des de Windows 95/98 fins sistemes operatius més nous.

El valor correcte és:

Quan és convertit pel processador a hexadecimal, 4,195,835 = 0x4005FB i 3,145,727 = 0x2FFFFF. El '5' en 0x4005 dispara l'error en la unitat lògica de control de la FPU. Retornant un valor incorrecte per un model Pentium afectat per fins a 4 xifres:[1]


Referències[modifica | modifica el codi]

  1. «Pentium FDIV bug - a Picture». Kansas University Institute for Policy and Social Research, 30-11-1994. [Consulta: 10 desembre 2016].

Enllaços externs[modifica | modifica el codi]