# Pentium-FDIV-Bug

FDIV-Bug bezeichnet einen Hardwarefehler des Pentium-Prozessors von Intel. Der Fehler wurde im November 1994 anderthalb Jahre nach der Markteinführung bekannt und führt bei Gleitkomma-Divisionen mit bestimmten, relativ wenigen Wertepaaren zu ungenauen Ergebnissen. Kein anderer Fehler in einem CPU-Design hat so viel Wirbel und Aufregung bei Anwendern und Fachleuten ausgelöst. In der Folge werden entdeckte Hardwarefehler von vielen Herstellern veröffentlicht.
Die Bezeichnung FDIV-Bug leitet sich vom Namen eines häufig verwendeten Gleitkommabefehls der x86-Architektur ab. Der Fehler betrifft aber keineswegs ausschließlich den Befehl FDIV, wie man vermuten könnte. Vielmehr sind alle Befehle betroffen, die die fehlerhafte Divisionseinheit benutzen. Im Einzelnen sind das: FDIV, FDIVP, FDIVRP, FIDIV, FIDIVR, FPREM, FPREM1, FPTAN und FPATAN.

## Entdeckung des Fehlers

Als Entdecker, dem es zu verdanken ist, dass der Fehler der breiten Öffentlichkeit bekannt wurde, gilt anerkanntermaßen Prof. Thomas Ray Nicely vom Lynchburg College. Er entdeckte den Fehler beim Versuch einer genauen Berechnung der Brunschen Konstante. Nachdem er dem Fehler mehrere Monate auf den Grund gegangen war, informierte er am 30. Oktober 1994 ausgewählte Fachbuchautoren und Fachjournalisten und brachte damit den Stein ins Rollen. Die näheren Umstände und den zeitlichen Ablauf der Entdeckung hat Nicely in einem FAQ zusammengefasst.
Nach eigenen Angaben hatte Intel den Fehler bereits vor seinem Bekanntwerden entdeckt. Verschiedene Quellen nennen den Juni, andere gar erst den August 1994 als Zeitpunkt der Entdeckung. Nicely spricht in seinem FAQ davon, dass Intel den Fehler bereits im Mai bei der Arbeit an der Gleitkommaeinheit des damals noch in Entwicklung befindlichen Pentium-Nachfolgers P6, dem späteren Pentium Pro, entdeckte. Robert Colwell, Chefarchitekt des Pentium Pro, bestätigte diese Darstellung in seinem Buch über das P6-Entwicklungsprojekt. Laut Colwell fiel der Fehler etwa drei Monate vor Nicelys Veröffentlichung dem P6-Gleitkomma-Architekten Patrice Roussel im Rahmen einer vergleichenden Validierung der RTL-Simulation der zukünftigen P6-Gleitkommaeinheit auf und wurde dem Pentium-Entwicklungsteam zur Bearbeitung zugeleitet. Deshalb konnte Intel schon im Oktober eine fehlerbereinigte Pentium-Version in Musterstückzahlen liefern.

## Größe, Häufigkeit und Auswirkungen des Fehlers

Die relative Größe des Fehlers, wenn er auftrat, betrug deutlich weniger als ein Promille: Stets waren mindestens die ersten 12 Bit korrekt. Zudem trat der Fehler selten auf: Von den 2,28·10$^{47}$ möglichen Paaren von Zähler und Nenner waren etwa 3·10$^{37}$ betroffen. Insbesondere waren die Kehrwerte von sämtlichen einfach genauen Zahlen korrekt. Spürbare Auswirkungen konnten in Anwendungen auftreten, in denen eine hohe Genauigkeit gebraucht wurde und die Eingangsdaten dies hergaben, wie etwa in der Vorausberechnung astronomischer Ereignisse, oder bei Anwendungen, in denen eine schlechte Kondition eine Vergrößerung von Rechenfehlern bewirkte.
Ob und in welchem Ausmaß Normalanwender von dem Fehler betroffen sein könnten, war in den Wochen nach der Entdeckung umstritten. Viele Anwender arbeiteten zu dieser Zeit noch mit CPUs, die keine Gleitkommaeinheit besaßen, sodass verbreitete Standardsoftware eine vorhandene Gleitkommaeinheit ignorierte.
Intel behauptete zunächst, der Fehler werde bei einem Normalanwender statistisch nur alle 27.000 Jahre einmal auftreten und sei nur bei der Primzahlerzeugung oder anderen anspruchsvollen Berechnungen relevant. Nicht zuletzt die Fachpresse hielt dem andere Schätzungen entgegen. So ermittelte das deutsche Fachmagazin c’t in seiner Januar-Ausgabe 1995 eine durchschnittliche Häufigkeit von einem Fehler alle 60 Stunden bei gleitkommaintensiven Anwendungen, räumte aber gleichzeitig ein, „dass die Zahl der wirklich Betroffenen tatsächlich nicht so groß sein dürfte“.
IBM schaltete sich ein und stoppte pressewirksam die Auslieferung von Rechnern mit Pentium-CPU und rechnete vor, dass der Fehler statistisch sogar alle sechs Stunden einmal auftreten könne. Die Reaktionen und Behauptungen IBMs waren damals aber nicht unumstritten; war IBM doch mit seiner PowerPC-CPU und seinen RS/6000-Workstations einer der schärfsten Konkurrenten von Intel im Highend-Sektor. So wurde der Vorstoß IBMs von vielen eher als marktstrategisches Manöver gewertet.
Nicely nahm Intel angesichts derart dramatischer Darstellungen in Schutz. In seinem FAQ vertrat er den Standpunkt, dass ein zwischenzeitlich von Intel in Umlauf gebrachtes White Paper, das eine statistische Analyse des Fehlers enthielt, deutlich näher an der Realität liege als die Darstellungen von IBM.

## Ursache des Fehlers

Die CPU verwendet das Verfahren der SRT-Division, bei der Lookup-Tabellen verwendet werden. In den fehlerhaften CPUs lagen hierbei fünf falsche Tabelleneinträge vor. Statt des Wertes 2 ist in den Zellen der Wert 0 eingetragen. Der Fehler tritt, wegen der ungleichen Wahrscheinlichkeitsverteilung, mit der die einzelnen Zellen ausgelesen werden, nur selten – beziehungsweise nur bei bestimmten Zahlenkombinationen – auf.

## Reaktionen auf den Fehler

Nachdem Intel den Fehler entdeckt hatte, beseitigte man ihn stillschweigend und begann vermutlich irgendwann im Spätsommer oder Anfang Herbst damit, die Produktion der verschiedenen Pentium-Varianten nach und nach auf die fehlerbereinigten Versionen umzustellen. Trotzdem lieferte man betroffene CPUs noch bis spät ins Jahr 1994 aus, lange Zeit davon ohne Wissen der Anwender.
Kritiker warfen Intel deshalb vor, man hätte den Fehler zunächst vertuschen, dann verharmlosen wollen. So behauptete Intel nach Bekanntwerden des Fehlers, er würde bei den meisten Anwendern nie auftreten. In diesem Zusammenhang soll von dem bereits oben erwähnten „statistischen Auftreten alle 27.000 Jahre bei normalen Endusern“ die Rede gewesen sein. Diese Einschätzung löste bei Anwendern und Fachpresse empörte Reaktionen aus.
Intel kündigte zunächst an, nur CPUs von Anwendern zu tauschen, die darlegen konnten, dass sie von dem Fehler betroffen seien. Viele Anwender forderten Intel daraufhin auf, alle betroffenen CPUs zu tauschen. Die Fachpresse ließ kein gutes Haar an dieser Ankündigung. Nachdem der Druck immer stärker wurde und dem Konzern ein ernstzunehmender Imageschaden drohte, lenkte Intel am 20. Dezember schließlich ein und kündigte ein umfassendes Austauschprogramm für alle betroffenen CPUs an.
Nicht zuletzt erntete Intel für den Fehler viel Schadenfreude. Witze der Art „Wie viele Intel-Mitarbeiter braucht man, um eine Glühbirne zu wechseln? 1,9999983256“ oder „You mean 2.00000000 + 2.000000000 doesn't equal 3.999998456?“ kursierten damals zuhauf.
Intel zog Lehren aus dem Vorfall. Andy Grove, Mitbegründer und CEO von Intel, entschuldigte sich in der Presse für den Ärger, den seine Haltung verursacht hat. Es wurde extra für den Umtausch der fehlerhaften CPUs eine Telefonzentrale eingerichtet. Insgesamt stellte Intel für diesen Vorfall 475 Millionen Dollar zur Verfügung, was über der Hälfte des Gewinns im vierten Quartal des Jahres 1994 entsprach. Am Ende wurden ca. eine Million fehlerhafte Prozessoren umgetauscht. Nicely verurteilte die Austauschaktion als Verschwendung von Ressourcen.
1995 begann Intel mit der Veröffentlichung aller in den eigenen CPUs entdeckten Fehler. Um an diese Informationen zu kommen, musste man zuvor noch einen Geheimhaltungsvertrag unterzeichnen. Von nun an konnte sich jeder in sogenannten Specification Updates über Fehler in Intel-Produkten informieren.
In den Specification Updates betroffener Pentium-CPUs werden die Auswirkungen des FDIV-Bugs umschrieben als: „Slight Precision Loss for Floating-point Divides on Specific Operand Pairs“, was übersetzt soviel bedeutet wie: „geringfügig reduzierte Genauigkeit bei Gleitkomma-Divisionen mit bestimmten Operanden-Paaren“. In Abhängigkeit vom Typ der Pentium-CPU trägt der FDIV-Bug in diesen Specification Updates die Bezeichnung Erratum 20 (beim P5-Pentium) bzw. Erratum 23 (beim P54C-Pentium).

## Betroffene Pentium-Versionen

Der Fehler findet sich in allen Pentium-CPUs, die bis Anfang Herbst 1994 produziert wurden. Später hergestellte Exemplare weisen ihn teilweise noch auf. Da bis Anfang 1995 lediglich Pentium-CPUs bis einschließlich 100 MHz hergestellt wurden, sind alle schnelleren Varianten von dem Fehler nicht betroffen.
Das heißt aber nicht, dass alle Pentium-CPUs mit Taktfrequenzen von 100 MHz und weniger den Fehler haben. Da Intel die CPUs im Rahmen des Austauschprogramms ausschließlich gegen solche mit gleicher Taktfrequenz tauschte und fehlerbereinigte Versionen dieser CPUs weiterhin verkaufte, sind danach noch sehr viele Pentium-CPUs mit Taktfrequenzen zwischen 60 und 100 MHz in Umlauf gekommen, die den Fehler nicht haben. Allein von der Taktfrequenz lässt sich also nicht auf das Vorhandensein des FDIV-Bugs schließen.
Bis Herbst 1994 bestand der Großteil der Pentium-Produktion jedoch aus Modellen des ersten Pentium-Typs P5, den es ausschließlich mit Taktfrequenzen von 60 und 66 MHz gab. Der fortschrittlichere P54C-Typ, der zunächst ausschließlich mit 90 und 100 MHz verfügbar war, war hingegen teuer und vergleichsweise selten. Unter anderem deswegen machen die 1994 gefertigten P5-Modelle den größten Teil aller vom FDIV-Bug betroffenen CPUs aus.
Da Intel den Pentium mit 75 MHz für den Sockel 5 (SPGA-Typ) erst am 10. Oktober 1994 vorstellte, als das fehlerbereinigte B5-Stepping des P54C bereits in Produktion war, sind von der Sockel-5-Version nur die 90- und 100-MHz-Typen betroffen, welche bereits vorher verkauft wurden. In Desktop-PCs und Servern sollten sich daher keine betroffenen 75-MHz-Typen finden. Beim Pentium für den mobilen Einsatz ist hingegen ausschließlich die 75-MHz-Version betroffen. Das schließt selbstverständlich die Möglichkeit nicht aus, dass es Hersteller gegeben haben mag, die Sockel-5-Typen mit 90 und 100 MHz in Notebooks verbaut haben.
Folgende Pentium-Versionen sind betroffen:
| Prozessortyp | Family | Model | Stepping | Core-Stepping | sSpec |
| Pentium 60/66 (P5) | 5 | 1 | 3 | B1 | Q0352 Q0353 Q0394 Q0395 Q0399 Q0400 Q0412 Q0413 Q0466 Q0467 SX753 SX754 SX835 SX837 SZ949 SZ950 |
| Pentium 60/66 (P5) | 5 | 1 | 5 | C1 | Q0352 Q0353 Q0394 Q0395 Q0399 Q0400 Q0412 Q0413 Q0466 Q0467 SX753 SX754 SX835 SX837 SZ949 SZ950 |
| Pentium 90/100 (P54C) | 5 | 2 | 1 | B1 | Q0542 Q0543 Q0563 Q0587 Q0611 Q0612 Q0613 Q0614 Q0628 Q0677 SX874 SX879 SX885 SX886 SX909 SX910 SX921 SX922 SX923 SX942 SX943 SX944 SX960 SZ951 |
| Pentium 90/100 (P54C) | 5 | 2 | 2 | B3 | Q0542 Q0543 Q0563 Q0587 Q0611 Q0612 Q0613 Q0614 Q0628 Q0677 SX874 SX879 SX885 SX886 SX909 SX910 SX921 SX922 SX923 SX942 SX943 SX944 SX960 SZ951 |
| mobile Pentium 75 (P54C) | 5 | 2 | 1 | B1 | Q0601 Q0606 SX951 |
| mobile Pentium 75 (P54C) | 5 | 2 | 2 | B3 | Q0601 Q0606 SX951 |
Hat man eine ausgebaute CPU, so richtet man sich am einfachsten nach der so genannten sSpec, ein für gewöhnlich fünfstelliges Kürzel aus Buchstaben und Ziffern, das auf das CPU-Gehäuse aufgedruckt ist. Die betroffenen sSpecs sind in der Tabelle oben angegeben.
Die Identifizierung einer fehlerhaften CPU anhand ihrer Aufschrift ist natürlich nicht möglich, wenn sie in einem lauffähigen System steckt. Es gibt aber trotzdem Möglichkeiten, herauszufinden, ob die CPU von dem Fehler betroffen ist. Findet sich bei einem Linux-System in /proc/cpuinfo ein Eintrag der Art fdiv_bug: yes , ist die CPU betroffen; ebenso wenn die im Folgenden aufgeführten Rechenoperationen im Windows-Taschenrechner das falsche Ergebnis liefern:
| Rechenoperation | 4195835 / 3145727 | 5505001 / 294911 | 8391667 / 1572863 |
| Falsches Ergebnis | 1,33373907 | 18,66600093 | 5,3349560642 |
| Richtiges Ergebnis | 1,3338204x | 18,666652x | 5,3352816x |
| Abweichung (ca.) | 1,00 / 2$^{14}$ | 0,57 / 2$^{14}$ | 1,00 / 2$^{14}$ |
Statt 64 Bit Genauigkeit treten Genauigkeitsdegradationen bis 13 Bit auf.