Maschinengenauigkeit

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Die Maschinengenauigkeit ist ein Maß für den Rundungsfehler, der bei der Rechnung mit Gleitkommazahlen auftritt.

Beschreibung[Bearbeiten]

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| \le \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[Bearbeiten]

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[Bearbeiten]

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.

Zahlensystem.png

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 \scriptstyle \varepsilon=\frac{1}{2}2^{1-3}=\frac{1}{8}=0{,}125. Die Maschinengenauigkeit ist also im Allgemeinen eine sogenannte Worst-Case-Abschätzung.

Bedeutung[Bearbeiten]

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[Bearbeiten]

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

Näherungsweise Berechnung[Bearbeiten]

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[Bearbeiten]

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

   UMACHN = 1.0
10 UMACHN = 0.5*UMACHN
   IF ( 1.0 + 0.5*UMACHN .GT. 1.0 ) GOTO 10

Approximation in Java[Bearbeiten]

    private static float calculateMachineEpsilonFloat() {
        float machEps = 1.0f;
 
        do
           machEps /= 2.0f;
        while ((float) (1.0 + (machEps / 2.0)) != 1.0);
 
        return machEps;
    }

Approximation in Pascal[Bearbeiten]

function machine_epsilon: double;
var one_plus_halfepsilon: double;
begin
  Result := 1.0;
  repeat
    Result := 0.5 * Result;
    { damit das Ergebnis der Addition garantiert den richtigen Typ hat,
      wird es einer Variablen zugewiesen }
    one_plus_halfepsilon := 1.0 + 0.5 * Result;
  until one_plus_halfepsilon <= 1.0;
end;

Literatur[Bearbeiten]

  • A. Kielbasinski und H. Schwetlick: Numerische lineare Algebra Deutscher Verlag der Wissenschaften 1988
  • Alfio Quarteroni, Riccardo Sacco, Fausto Saleri: Numerische Mathematik 1, Springer-Verlag 2002, ISBN 3-540-67878-6

Einzelnachweise[Bearbeiten]

  1.  Gisela Engeln-Müllges, Fritz Reutter: Formelsammlung zur Numerischen Mathematik mit Standard-FORTRAN-77-Programmen. 5. Auflage. Bibliographisches Institut, Zürich 1986, ISBN 3-411-03125-5.