Maschinengenauigkeit
# Maschinengenauigkeit

Die Maschinengenauigkeit $\varepsilon$ ist ein Maß für den Rundungsfehler, der bei der Rechnung mit Gleitkommazahlen auftritt. Andere gebräuchliche Bezeichnungen für die Maschinengenauigkeit sind Rundungseinheit (unit roundoff) und Maschinenepsilon (bzw. macheps).

## Beschreibung

Aufgrund der endlichen Mantisse in der Gleitkommadarstellung lassen sich Zahlen auf einem Computer nicht beliebig genau darstellen. Es muss gerundet werden. Statt $x$ verwendet der Computer die Zahl $\operatorname {rd} (x)$ für die weitere Rechnung.

Falls die Rundung zur nächstgelegenen normalisierten Gleitkommazahl erfolgt (kaufmännisches Runden oder mathematisches Runden), gilt für den dabei auftretenden relativen Rundungsfehler:

    $\left|{\frac {x-\operatorname {rd} (x)}{x}}\right|\leq \varepsilon ={\frac {1}{2}}\beta ^{1-t}$

Dabei wird $\varepsilon$ als Maschinengenauigkeit bezeichnet. $\beta$ ist die Basis der Gleitkommadarstellung und $t$ die Mantissenlänge. Die Maschinengenauigkeit gibt also den maximalen relativen Rundungsfehler an.

Falls die Rundung zu einer der beiden benachbarten normalisierten Gleitkommazahlen erfolgt (Abrunden, Aufrunden, Rundung durch Abschneiden), gilt für den dabei auftretenden relativen Rundungsfehler:

    $\left|{\frac {x-\operatorname {rd} (x)}{x}}\right|<2\cdot \varepsilon =\beta ^{1-t}$

### Bemerkungen

Die angegebene Abschätzung für den Rundungsfehler gilt nur für normalisierte Gleitkommazahlen. Nähert man sich der Zahl Null, so kann der relative Rundungsfehler auch größer werden und steigt bis auf 100 % (für $\operatorname {rd} (x)=0$).

Es sind auch andere Bezeichnungen für die Maschinengenauigkeit gebräuchlich. Insbesondere sind dies Rundungseinheit (unit roundoff) und manchmal auch Maschinenepsilon (bzw. macheps), wobei der Begriff Maschinenepsilon auch für den maximalen relativen Abstand zweier benachbarter normalisierter Gleitkommazahlen verwendet wird. Dieser hat die Größe $2\cdot \varepsilon$. Daraus ergibt sich die Abschätzung des relativen Rundungsfehlers bei Rundung zu einer benachbarten normalisierten Gleitkommazahl: Falls etwa im schlechtesten Fall $x$ knapp größer ist als eine normalisierte Gleitkommazahl und $\operatorname {rd} (x)$ durch Aufrundung die nächstgrößere normalisierte Gleitkommazahl ist, so ist der relative Abstand von $x$ zu $\operatorname {rd} (x)$ kleiner als der maximale relative Abstand zweier benachbarter normalisierter Gleitkommazahlen.

## Beispiel

Als Beispiel soll ein Zahlensystem zur Basis 2 mit der Mantissenlänge 3 genommen werden. Das Bild zeigt die entsprechenden Gleitkommazahlen im Bereich 1 bis 8.

Die Zahl 4,2 wird in diesem System auf 4 gerundet werden. Der absolute Rundungsfehler ist dann:

    $|x-\operatorname {rd} (x)|=|4,2-{\text{rd}}(4{,}2)|=|4{,}2-4|=0{,}2$

Der relative Rundungsfehler ergibt sich aus:

    $\left|{\frac {x-\operatorname {rd} (x)}{x}}\right|={\frac {0{,}2}{4{,}2}}={\frac {1}{21}}\approx 0{,}05$

Dieser ist natürlich kleiner als die Maschinengenauigkeit für dieses Beispiel $\varepsilon ={\tfrac {1}{2}}2^{1-3}={\tfrac {1}{8}}=0{,}125$. Die Maschinengenauigkeit ist also im Allgemeinen eine sogenannte Worst-Case-Abschätzung.

## Bedeutung

Das Ergebnis einer Rechnung ist wesentlich von der Maschinengenauigkeit abhängig. Zunächst können die Eingangsdaten nicht beliebig genau dargestellt werden. Daraus resultiert ein Fehler im Ergebnis. Dieser Fehler wird über die Kondition des Problems beschrieben. Multipliziert man die Kondition mit der Maschinengenauigkeit erhält man eine Abschätzung dieses Fehlers. Die zweite Fehlerquelle entsteht aus der Ungenauigkeit des verwendeten Algorithmus. Diese Fehlerverstärkung wird als Stabilität bezeichnet. Auch hierfür lässt sich manchmal die entsprechende Stabilitätskonstante angeben. Ein schlecht konditioniertes Problem oder ein mäßig stabiler Algorithmus erfordern also eine hohe Maschinengenauigkeit oder eine geeignete Problemumformulierung beziehungsweise die Verwendung eines stabileren Algorithmus.

## Maschinengenauigkeit in der Praxis

Heutige Computer arbeiten meist nach IEEE 754. Die Maschinengenauigkeit für die dabei verwendeten Datentypen ist $\varepsilon =2^{-24}\approx 5{,}96\cdot 10^{-8}$ für einfache Genauigkeit (single precision) und $\varepsilon =2^{-53}\approx 1{,}08\cdot 10^{-16}$ für doppelte Genauigkeit (double precision).

### Scheinbare Rundungsfehler

Nach IEEE 754 kann beispielsweise die Gleitkommazahl 2,05 (ganzrational = 205/100) bei 64-Bit-Systemen (im Standard IEEE 754 als "binary64" bezeichnet) nicht exakt, sondern nur mit der Maschinengenauigkeit gespeichert werden. Stattdessen wird deswegen der nächstbeste speicherbare Gleitkommawert mit 16 Nachkommastellen 2,0499999999999998 verwendet, der nach dem Standard DIN 1333 kaufmännisch mit einer Nachkommastelle auf 2,0 abgerundet wird, obwohl der ursprüngliche Wert von 2,05 auf 2,1 aufgerundet würde.

Beim Austausch von Zahlenwerten mit anderen Computern oder Datenbanken sowie beim dauerhaften Speichern in Dateien, wird in der Regel der mit der Maschinengenauigkeit binär codierbare Zahlenwert verwendet. Dies kann für die Anwender zu nicht offensichtlichen Rundungsfehlern führen, weil viele Anwendungsprogramme in ihren Benutzerschnittstellen diesen Wert in den entsprechenden Textfeldern unter Berücksichtigung des epsilon-Wertes für die jeweilige Maschinengenauigkeit $\epsilon$ mit reduzierter Anzahl von Nachkommastellen auf 2,05 gerundet und ohne die Nullen am Ende nur scheinbar korrekt anzeigen.

## Näherungsweise Berechnung

In der Praxis wird die Maschinengenauigkeit als kleinste positive Gleitkommazahl $\varepsilon$ ermittelt, für die auf der betreffenden Maschine die Bedingung

    $1+\varepsilon >1$

erfüllt ist. Da die Zwischenergebnisse der folgenden Programme aufgrund der Verwendung von 2er Potenzen, bzw. 1.0 + 2er Potenz, entweder exakt oder gerade nicht mehr darstellbar sind, berechnen die folgenden Programme den relativen Abstand zweier Gleitkommazahlen. Die Maschinengenauigkeit bei symmetrischer Rundung ergibt sich dann aus der Hälfte des Ergebnisses.

### Approximation in Fortran

Ab Fortran 90 kann die Maschinengenauigkeit durch Aufruf der Intrinsic-Funktion epsilon berechnet werden. Für Fortran 77 und früher können folgende Statements verwendet werden (Variable vom Typ real):

