Direkt zum Inhalt

Die fabelhafte Welt der Mathematik: Pentium-Bug: Primzahlen decken Hardwarefehler auf

Als ein Mathematiker in den 1990er Jahren die geheimnisvolle brunsche Konstante untersucht, fällt ihm eine Ungenauigkeit auf. So entdeckt er einen Fehler in Pentium-Prozessoren, den Intel vertuschen wollte.
Computerchip
Mikroprozessoren sind die Rechenzellen unserer Computer – und auch sie sind nicht vor Fehlern gefeit.
»Wie viele Pentium-Mitarbeiter braucht man, um eine Glühbirne zu wechseln?« – »1,99904274017«.

Dieser Witz und viele weitere gehen auf einen Fehler zurück, den die ersten Pentium-Mikroprozessoren von Intel in den 1990er Jahren aufwiesen. Es war nicht bloß Schadenfreude, die zu solchen Scherzen führte, sondern die enttäuschende Reaktion des Unternehmens. Denn wie sich herausstellte, wusste Intel schon Monate vor Bekanntwerden um die Probleme der Chips – und wahrte Stillschweigen darüber. Die Firma korrigierte zwar den Bug in den neu produzierten Geräten, lieferte aber die fehlerhaften Einheiten weiter aus.

Etwa sechs Monate ging das gut. Bis sich der Mathematikprofessor Thomas R. Nicely vom Lynchburg College in Virginia im Jahr 1994 vornahm, einen Rekord zu brechen. Er wollte den bisher präzisesten Wert der brunschen Konstante berechnen. Für Mathematiker ist die Zahl besonders spannend, da sie eng mit Primzahlen und einer der größten damit verbundenen Fragen zusammenhängt: der Anzahl so genannter Primzahlzwillinge. Dabei handelt es sich um Paare von Primzahlen, deren Differenz 2 beträgt, wie 3 und 5, 5 und 7 oder 107 und 109. Dass es unendlich viele Primzahlen gibt, konnte schon Euklid in der Antike beweisen. Doch ob auch unbegrenzt viele Primzahlzwillinge existieren, ist bis heute offen.

Die fabelhafte Welt der Mathematik
Viele Menschen denken, Mathematik sei kompliziert und öde. In dieser Serie möchten wir das widerlegen – und stellen unsere liebsten Gegenbeispiele vor: von schlechtem Wetter über magische Verdopplungen hin zu Steuertricks. Die Artikel könnt ihr hier lesen.

Um dieser Frage nachzugehen, untersuchte Viggo Brun im Jahr 1919 die Summe der Kehrwerte von Primzahlzwillingen: (13+15) + (15+17) + (111+113) + …. Würde das Ergebnis unendlich lauten, dann gäbe es zweifelsfrei unendlich viele Primzahlzwillinge. Die Summe aller Kehrwerte von Primzahlen ergibt beispielsweise unendlich. Doch wie sich herausstellte, liefert Bruns' Berechnung einen endlichen Wert. Mit dieser Erkenntnis hatte er leider nichts gewonnen: Eine Erklärung wäre, dass tatsächlich nur endlich viele Zwillingspaare existieren – oder aber unendlich viele, die jedoch so selten sind, dass die Addition ihrer Kehrwerte ein endliches Resultat liefert.

Wie groß ist die brunsche Konstante?

In seiner Arbeit zeigte Brun zwar, dass die inzwischen nach ihm benannte Konstante endlich ist, doch den genauen Wert konnte er nicht angeben. Dieser Schwierigkeit nahmen sich seine Kolleginnen und Kollegen in den folgenden Jahrzehnten an. Durch die Entwicklung von Computern ließ sich die Aufgabe immer besser bewältigen. 1976 hatte Richard Brent von der Australian National University alle Primzahlzwillinge bis 100 Milliarden (was etwa 224 Millionen Paaren entspricht) genutzt, um die brunsche Konstante auf 1,90216054 abzuschätzen. 18 Jahre später wollte Nicely noch weiter gehen und Primzahlpaare bis mehrere Billionen berücksichtigen. Damit würde er den bis dahin genauesten Wert der brunschen Konstante liefern.

Intel-Pentium-Prozessor

Da bei der Berechnung solch kleiner Größen (der Kehrwert großer Zahlen ist bekanntlich winzig) schnell mal etwas schiefgehen kann, verwendete Nicely sicherheitshalber zwei verschiedene Algorithmen. Ersterer war der einfache Weg: Der Computer verwendet jeden Wert mit der eingebauten Präzision, die bis zur 19. Nachkommastelle reicht, und führt damit die Berechnung aus. Nicely entwickelte aber auch ein Programm, das zuerst genauere Werte miteinander verrechnet und erst ganz am Schluss rundet. Das ist, als wolle man 13+17 kalkulieren, würde aber jede Zahl nach der zweiten Nachkommastelle abschneiden. Der direkte Weg führt zu: 0,33 + 0,14 = 0,47. Allerdings kann man auch ein genaueres Ergebnis erzielen, indem man die Additionsregeln von Brüchen ausnutzt und erst danach rundet: 13+17 = (7+3)21 = 1021 ≈ 0,48.

Eine unerwartete Unstimmigkeit: Wo lag der Fehler?

Als Nicely beide Codes laufen ließ, fiel der Unterschied zwischen den zwei Ergebnissen deutlich größer aus, als er erwartet hatte. Natürlich glaubte er zuerst, etwas falsch gemacht zu haben, und durchsuchte sein Programm nach Fehlern. Als er keinen fand, nahm er die einzelnen Rechenschritte auseinander, um der Fehlerquelle auf den Grund zu gehen. Er wurde fündig: Der Computer lieferte falsche Werte für die Kehrwerte des Paars 824 633 702 441 und 824 633 702 443. Bereits ab der zehnten Nachkommastelle mischten sich Ungenauigkeiten hinein – dabei sollte theoretisch bis zur 19. Stelle alles stimmen.

Nicely war sich immer noch nicht sicher, ob die Hardware oder die Software schuld daran war. Aus lauter Verzweiflung kramte er irgendwann einen älteren Computer aus, der den Vorläufer des Pentium-Chips, den »486«-Prozessor, enthielt. Da verschwand die Unstimmigkeit plötzlich. Weil sich die Geräte jedoch in vielen Komponenten – nicht nur den Recheneinheiten – unterschieden, überprüfte der Mathematiker nach und nach die relevanten Bauteile. Erst nach vier Monaten glaubte er, alle Fehlerquellen ausschließen zu können. Er hatte zwei weitere Computer mit den damals neuen Pentium-Prozessoren aufgetrieben und begegnete auch dort den gleichen Problemen. Es musste an den Intel-Chips liegen. Am 24. Oktober 1994 kontaktierte er das US-amerikanische Unternehmen und machte es auf die Schwachstelle aufmerksam.

»Warum hat Intel den neuen Prozessor ›Pentium‹ genannt und nicht ›586‹?« – »Weil die Entwickler 486 und 100 auf dem Pentium-Chip addiert haben und 585,999983605 herauskam.«

Als Intel nach elf Tagen noch immer nicht reagiert hatte, fragte Nicely einige Kolleginnen und Kollegen, ob sie seine Beobachtung bestätigen könnten. Er wies sie an, bestimmte Berechnungen auf Computern mit 486- und Pentium-Prozessoren durchzuführen und zu vergleichen. In diesem Fall ließ die Antwort nicht lange auf sich warten. Die Akademiker stießen auf die gleichen Unstimmigkeiten – in Windeseile breitete sich die Neuigkeit im Internet aus. Kurze Zeit später griffen auch die Medien das Thema auf, Beiträge erschienen unter anderem in der »New York Times« und bei CNN.

Ein mageres Schuldeingeständnis

Intel blieb nichts anderes übrig, als den Fehler im November 1994 zuzugeben. Ein Entwickler kontaktierte Nicely und teilte ihm mit, die Firma habe das Problem bereits im Frühsommer bemerkt. Der Öffentlichkeit gegenüber betonte Intel, der Fehler trete sehr selten auf und würde nur wenige Personen betreffen. Das Unternehmen sei daher bereit, die fehlerhaften Geräte zu ersetzen, wenn man nachweisen könne, dass man wirklich durch den Bug betroffen sei. Obwohl der Fehler wohl tatsächlich wenige Auswirkungen hatte, sorgte die Reaktion für großen Unmut: Die Aktienkurse stürzten ab und IBM stoppte den Verkauf von Geräten mit Intel-Prozessoren.

Daraufhin sah sich Intel am 20. Dezember 1994 gezwungen, nun doch alle fehlerhaften Geräte zu ersetzen. Das kostete das Unternehmen 475 Millionen US-Dollar. Wollte ein Nutzer den Prozessor wechseln, musste er das allerdings selbst tun: Für das Ein- und Ausbauen der Hardware kam Intel nicht auf. »Es ist die individuelle Entscheidung eines Nutzers, ob der Fehler die Genauigkeit seiner Anwendung beeinträchtigt«, schrieb die Firma dazu auf ihrer Support-Seite.

Aus PR-Gründen blieb Intel kaum eine andere Wahl, als die fehlerhaften Chips durch neue auszutauschen. Vor allem, weil das Unternehmen den Fehler bereits seit Monaten gekannt hatte, ohne es den Nutzerinnen und Nutzern mitgeteilt zu haben. Zwar hatten die Verantwortlichen die neu produzierten Geräte ausgebessert, aber gehofft, der Bug würde bei den bisher verkauften Prozessoren nicht auffallen.

Normale Anwender spüren die Auswirkungen kaum

Ganz unbegründet war die Hoffnung nicht. Im schlimmsten Fall kann der Fehler zu einer Ungenauigkeit ab der vierten Nachkommastelle einer Zahl führen. Meist taucht der Bug allerdings – wenn überhaupt – erst ab der zehnten oder elften Nachkommastelle einer Zahl auf. Außerdem ist nicht jede Berechnung falsch. Nur die Division ganz bestimmter Werte führt zu Problemen: Von den 2,28·1047 verschiedenen Kombinationen aus Zählern und Nennern, die ein Computer bilden kann, sind bloß 3·1037 betroffen. Intel ging daher davon aus, ein Fehler bei Standardanwendern würde durchschnittlich nur alle 27 000 Jahre eintreten. Wissenschaftliche Untersuchungen wie jene von Nicely führen hingegen häufiger zu einer Unstimmigkeit. Fachleute fochten Intels Einschätzung zwar an, doch auch sie waren sich einig, dass die meisten Nutzerinnen und Nutzer wohl kaum unter dem Bug litten.

Diese Ansicht teilte auch Nicely: »Es ist 1000 bis eine Million Mal wahrscheinlicher, dass Softwarefehler zu falschen Ergebnissen auf einem Pentium führen – und nicht der Prozessor selbst. Für den durchschnittlichen Nutzer hat der Fehler meiner Meinung nach keine nennenswerten Auswirkungen.« Der Mathematiker erklärte, er habe das Gefühl, viele Leute würden den Bug überschätzen. »Der Rückruf ist eine Verschwendung von Ressourcen«, schloss er.

Die Division als Fehlerquelle

Aber wie konnte der Fehler überhaupt entstehen? Die Pentium-Chips unterschieden sich von ihren 486er-Vorgängern vorrangig durch den Algorithmus, den sie zur Division von Zahlen verwendeten. Anstatt die übliche Methode zu nutzen, die wir bereits in der Schule kennen lernen, entschieden sich die Entwickler für den SRT-Ansatz, benannt nach den drei Erfindern Dura Sweeney, James Robertson und Keith Tocher. Tatsächlich arbeiteten sie die Idee unabhängig voneinander und fast zeitgleich im Jahr 1958 aus. Auch wenn das Verfahren auf den ersten Blick komplizierter wirkt, ermöglicht es, Rechnungen wesentlich schneller durchzuführen als die herkömmliche Division.

Schriftliche Division

Um zu verstehen, was bei Pentium schieflief, muss man nicht alle Details der SRT-Methode kennen. Entscheidend ist ein Aspekt, den alle Divisionsverfahren gemein haben: das geschickte Raten, mit welcher größtmöglichen Zahl man den Divisor multiplizieren muss, damit ein Wert herauskommt, der kleiner als der Dividend ist. Möchte man etwa 7739 durch 39 teilen, dann prüft man zuerst, wie oft 39 in 77 »hineinpasst«. Man könnte zunächst von 2 ausgehen, aber dann feststellen, dass das falsch ist (39·2 = 78>77). Deshalb fängt man von vorne mit dem Faktor 1 an.

»Wie lautet ein anderer Name für die ›Intel Inside‹-Aufkleber von Pentium?« – »Warnhinweis«

Um das SRT-Verfahren möglichst effizient auf die Pentium-Prozessoren zuzuschneiden, verwendeten die Entwickler daher eine so genannte Umsetzungstabelle: In der Zeile kann man die betreffenden Teile des Dividenden (im zuvor genannten Beispiel 77) und in der Spalte den Divisor (39) auswählen –diese führen dann zu dem gesuchten Faktor (1). 1066 Einträge enthielten die möglichen Faktoren –2, –1, 0, 1 und 2 (mehr Zahlen gab es nicht, da man nicht im Dezimalsystem arbeitete). Doch als die Intel-Mitarbeiter die Tabelle auf die Hardware übertrugen, machten sie einen Fehler: Fünf Einträge, die eigentlich eine 2 enthalten sollten, blieben leer – und wurden von den Prozessoren als 0 interpretiert.

Dadurch enthielten alle Berechnungen, die auf diesen fünf Einträgen basierten, einen Fehler. Und weil der SRT-Algorithmus rekursiv ist, kann sich die Ungenauigkeit verstärken. Ein bekanntes Beispiel, bei dem ein falsches Ergebnis entsteht, ist die Division von 4 195 835 durch 3 145 727: Der Pentium-Prozessor liefert 1,33373907…, während der korrekte Wert 1,3338204… lautet.

Auch wenn der Fehler für die meisten Anwender extrem unbedeutend war, schlug er durch die unangebrachte Reaktion von Intel hohe Wellen. Die Firma hat inzwischen daraus gelernt und unterzieht ihre Hardware zahlreichen Tests, bevor sie sie auf den Markt bringt. Der Vorfall hat viele Memes und Witze hervorgebracht. Unter anderem haben einige Personen eine Top-10-Liste für neue Intel-Werbeslogans zusammengetragen:

Top-10-Slogans

9.9999973251 It's a flaw, dammit, not a bug
8.9999163362 It's close enough, we say so
7.9999414610 Nearly 300 correct operation codes
6.9999831538 You don't need to know what's inside
5.9999835137 Redefining the PC – and mathematics as well
4.9999999021 We fixed it, really
3.9998245917 Division considered harmful
2.9991523619 Why do you think they call it *floating* point?
1.9999103517 We're looking for a few good flaws
0.9999999998 The errata inside

Was ist euer Lieblingsmathetheorem? Schreibt es gerne in die Kommentare – und vielleicht ist es schon bald das Thema dieser Kolumne!

Schreiben Sie uns!

5 Beiträge anzeigen

Wir freuen uns über Ihre Beiträge zu unseren Artikeln und wünschen Ihnen viel Spaß beim Gedankenaustausch auf unseren Seiten! Bitte beachten Sie dabei unsere Kommentarrichtlinien.

Tragen Sie bitte nur Relevantes zum Thema des jeweiligen Artikels vor, und wahren Sie einen respektvollen Umgangston. Die Redaktion behält sich vor, Zuschriften nicht zu veröffentlichen und Ihre Kommentare redaktionell zu bearbeiten. Die Zuschriften können daher leider nicht immer sofort veröffentlicht werden. Bitte geben Sie einen Namen an und Ihren Zuschriften stets eine aussagekräftige Überschrift, damit bei Onlinediskussionen andere Teilnehmende sich leichter auf Ihre Beiträge beziehen können. Ausgewählte Zuschriften können ohne separate Rücksprache auch in unseren gedruckten und digitalen Magazinen veröffentlicht werden. Vielen Dank!

Partnerinhalte

Bitte erlauben Sie Javascript, um die volle Funktionalität von Spektrum.de zu erhalten.