Seitenleiste

Wiki

Community

Datentypen

Zählbare

Fließkomma

Datenstrukturen

Attribute

Speicherklassen

Typqualifizierer

Fließkommazahlen

C kennt noch zwei weitere Datentypen: float und double. Wichtig zu wissen ist, dass C(und andere Programmiersprache) die englische Zahlenschreibweise verwenden. Das bedeutet, dass als Dezimaltrennzeichen ein Punkt und kein Komma verwendet wird. 0,5 schreibt man also 0.5 und ist gleich 1 durch 2.

Mit float werden Zahlen in 32 Bit gespeichert. float kommt von floating point, das heißt, es können gebrochene Zahlen (27.50, 3.1415 usw) gespeichert und auch berechnet werden können.

double stellt das selbe wie float dar, jeodch - wie der Name schon sagt - wird doppelt soviel Speicher für die Zahl bereitgestellt, also 64 Bit. Dies bewirkt, dass größere Zahlen, bzw. eine höhere Genauigkeiten der Stellen hinter dem Komma erreicht wird.

Bei alten Computern ist zu beachten ist, daß die Berechnung von float und double, grade auf Rechnern ohne Co-Prozessor langsam sind. Die Datentypen char, short und long sind also nach Möglichkeit vorzuziehen.

Ebenfalls wichtig ist, dass Fließkommazahlen nicht grundsätzlich exakt gespeichert werden können. Zahlen wie PI sind unendlich lang und können in einem begrenzten Computer-Speicher nicht abgelegt werden. Auch die Zahl 0,1 ist im binären Zahlensystem unendlich lang und kann in einer binären Fließkommazahl nicht exakt abgespeichert werden. Ungenaue Zahlen können allerdings ungenaue Ergebnisse hervorrufen, so dass man bei der Programmierung sehr darauf achten, dass sich die Fehler nicht aufschaukeln.

Solange sich die Zahlen innerhalb eines gewissen Bereichs befinden und nicht irrational sind. Sie dürfen also nur eine gewisse Anzahl von Stellen hinter dem Komma haben und eine gewisse Größe nicht überschreiten. Die kleinste Stelle hinter dem Komma, die nicht mehr exakt berechnet wird, wird als Epsilon bezeichnet. Ein Epsilon ist also zu klein, um noch garantiert richtig gerechnet zu werden. Sobald Zahlen Stellen hinter dem Komma haben, die kleiner als Epsilon werden, kann die Rechnung ungenau werden. Durch den Exponenten verschiebt sich das Epsilon, so dass auch die Addition von Ganzzahlen so ungenau wird, als dass eine Fließkommazahl diese Unterschiede noch speichern kann.

Die Rechnung mit Fließkommazahlen kann also unter Umständen zu falschen Ergebnissen führen. Um Algorithmen zu formulieren, die mit Fließkommazahlen (möglichst) korrekte Ergebnisse liefern, gibt es ein eigenes Fachgebiet: die Numerik. Algorithmen, die (möglichst) korrekte Ergebnisse liefern und dafür sorgen, dass sich Rechenfehler nicht aufaddieren, heißen numerisch stabil.

Fließende Kommas?

Der Aufbau einer Fließkommazahl besteht aus einem Vorzeichen, einem Exponenten und dem eigentlichen Wert der Zahl.

Ein float ist 32 Bit groß:

  1 Bit: Vorzeichen ( + oder - )
  8 Bit: Exponent ( * 2^Exponent )
 23 Bit: Mantisse ( Beschreibung des Wertes der Zahl ).
---------------------------------------------------------------
 32 Bit: Größe eines Floats.

In der Mantisse steht nun der Wert der Zahl, aber nicht wo sich das Komma befindet. Benötigt die Beschreibung der Zahl mehr als 23 Bit, so wird alles hinter dem 23. Bit vergessen. Die Beschreibung ist also ungenau, es liegt ein Rundungsfehler vor. Das Komma wird nun mit dem Exponenten nach links oder rechts verschoben. Es fließt also durch die Zahl.


Algorithmen, die darauf ausgelegt sind, Fehler von Fließkommazahlen zu unterdrücken heißen numerisch stabil.