Festkommazahl

aus Wikipedia, der freien Enzyklopädie

Eine Festkommazahl ist eine Zahl, die aus einer festen Anzahl von Ziffern vor und nach dem Komma besteht. Die Position des Kommas ist also fest vorgegeben, daher der Name.

Fixpointnumbers.png

Der Grundgedanke dahinter ist die informationstechnische Repräsentation eines Ausschnitts der rationalen Zahlen. Diese Abbildung auf einen begrenzt großen Datentypen, typischerweise Integer verschiedener Bitbreiten, erfordert eine feste Anzahl von Ziffern für den Vorkomma- wie den Nachkommaanteil. Üblicherweise sind gemäß Definition die ersten Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle n \leq k} Stellen Vorkommastellen und die restlichen Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle m = k - n} Nachkommastellen. In der Informatik haben die dezimalen wie die binären Festkommazahlen eine große praktische Bedeutung.

Vor- und Nachteile gegenüber einer Gleitkommazahl

Rechenaufwand

Durch die feste Position des Dezimalkommas fällt Rechenaufwand im Vergleich zur Rechnung mit Gleitkommazahlen weg. Wird in einem Computerprogramm eine binäre Festkommadarstellung gewählt, können zudem die zur Umrechnung und Korrektur notwendigen Multiplikationen und Divisionen durch schnelle Schiebeoperationen ersetzt werden. Ein Beispiel für eine Applikation, die gezielt aus Rechenaufwandsgründen mit Festkomma-Arithmetik entworfen wurde, ist z. B. Fractint, ein Fraktalgenerator.[1] Seit Mitte der 1990er Jahre haben Prozessoren dedizierte Gleitkommarechenwerke, die dazu führen, dass die Berechnung von Fraktalen mit Gleitkommazahlen schneller als die mit Ganzzahlen ist.

Präzision und Dynamik

Aufgrund der exakten Darstellung ist der Wertebereich einer Festkommazahl kleiner als der jeweilige Wertebereich einer Gleitkommazahl der gleichen (Bit-)Länge. Dafür ist jedoch die Exaktheit der Darstellung einer Zahl im gesamten Wertebereich gesichert, bei Gleitkommazahlen nicht immer (z. B. durch Absorption[2]). Ein Beispiel für eine Anwendung, die genaue Arithmetik benötigt und daher Festkommazahlen verwendet, ist GnuCash.[3]

Repräsentationsbeispiel: Binäre Festkommazahl

Alle binären Festkommazahlen der Länge und Vorkommastellen mit :

n = 2 n = 1 n = 0
Binärmuster Binär Dezimal Binär Dezimal Binär Dezimal
00 00, 0 0,0 0,0 ,00 0,00
01 01, 1 0,1 0,5 ,01 0,25
10 10, 2 1,0 1,0 ,10 0,50
11 11, 3 1,1 1,5 ,11 0,75

Man beachte, dass jedes der vier aufgelisteten binären Muster für jeweils drei unterschiedliche Zahlen steht, je nachdem an welche Stelle das Komma gesetzt wird. Da die Anzahl der Vorkommastellen bereits per Definition fest liegt, ist es unnötig, das sonst übliche Komma zu schreiben beziehungsweise zu speichern, d. h. die Repräsentation ist immer die der Spalte „Binärmuster“.

Rechnen mit Festkommazahlen

Bei der Rechnung mit Festkommazahlen werden die binären Muster prinzipiell so verarbeitet wie bei der Rechnung mit ganzen Zahlen. Festkomma-Arithmetik kann daher von jedem digitalen Prozessor durchgeführt werden, der arithmetische Operationen mit ganzen Zahlen unterstützt. Dennoch sind einige Regeln zu beachten, die sich auf die Position des Kommas vor und nach der Rechenoperation beziehen:

  • Bei Addition und Subtraktion muss die Position des Kommas für alle Operanden identisch sein. Ist dies nicht der Fall, sind die Operanden durch Schiebeoperationen entsprechend anzugleichen. Die Kommaposition des Ergebnisses entspricht dann der Kommaposition der Operanden.
  • Bei Multiplikation entspricht die Anzahl der Nachkommastellen des Ergebnisses der Summe der Anzahlen der Nachkommastellen aller Operanden.
  • Eine Division oder Multiplikation mit einer Potenz entspricht einer Bit-Schiebe-Operation des binären Musters nach rechts bzw. links um Stellen bei gleichbleibender Kommaposition. Alternativ kann die Operation als imaginäre Verschiebung des Kommas aufgefasst werden.

Anwendungsbeispiele

Die folgenden Beispiele gehen von einer dezimalen Festkommadarstellung aus, bei der zwei Nachkommastellen vorgesehen sind. Dies wird durch den Faktor 100 ausgedrückt, mit denen die ursprünglichen Werte multipliziert wurden, um die Festkommadarstellung zu erhalten.

In der Festkommadarstellung:

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 6{,}3\rarr 630_F}
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 2{,}1\rarr 210_F}
Addition
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 630_F + 210_F = 840_F}
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 840_F\rarr 8{,}4}
Subtraktion
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 630_F - 210_F = 420_F}
Multiplikation
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 630_F\times 210_F = 132300_?}
Hier ist das Ergebnis keine Festkommazahl nach denselben Kriterien wie die beiden Faktoren; eine Korrektur ist notwendig (hier: Division durch 100).
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 132300/100 = 1323_F \rarr 13{,}23}
Division
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \frac{630_F}{210_F} = 3_?}
Hier ist das Ergebnis keine Festkommazahl nach denselben Kriterien wie Dividend und Divisor; eine Korrektur ist notwendig (hier: Multiplikation mit 100).
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 3\times 100 = 300_F \rarr 3{,}00}
Beispiel in binärer 8-bit-Darstellung mit 4 Nachkommastellen und Schiebeoperation, wie sie z. B. in Rechnerarchitekturen verwendet wird

Dezimal:

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 3{,}5_d\times{}2{,}5_d = 8{,}75_d}

Binär:

Berechnung in der 8-Bit-Festkommadarstellung mit 4 Nachkommastellen:

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 3{,}5_d \rarr 0011\,1000_b}
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 2{,}5_d \rarr 0010\,1000_b}

Multiplikation:

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0011\,1000_b\times{}0010\,1000_b = 0000\,1000\,1100\,0000_b}

Ergebnis in der Festkommadarstellung:

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 1100\,0000_b} ,

mit der Bedeutung

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 1100{,}0000_b = 12_d}

Fehlerhafte Darstellung der Kommaposition, daher ist die Schiebeoperation notwendig:

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0011{,}1000_b\times{}0010{,}1000_b = 0000\,1000{,}1100\,0000_b}

Ergebnis wäre hier entsprechend der 8-Bit-Festkommadarstellung mit 4 Nachkommastellen:

Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 1000{,}1100_b = 8{,}75_d}

Das Ergebnis nach der Korrektur entspricht nun dem erwarteten Ergebnis.

Probleme

Bei der Darstellung einer reellen Zahl Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle z} kann es einige Probleme geben. Im Folgenden hat die Festkommazahl (angelehnt an die Darstellung in einem Rechner) eine Länge von Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle k = 8} und Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle n = m = 4} Vor- und Nachkommastellen. Der Ziffernvorrat sei Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \{0,1\}} – also eine binäre Festkommazahl der Länge eines Bytes mit gleich vielen Vor- und Nachkommastellen. Der tiefgestellte Index bezeichnet die Darstellung der Zahl: Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle X_R } für eine reelle Zahl in üblicher Dezimaldarstellung und für eine derartige Festkommazahl.

  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0_R = 00000000_F}
  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 1_R = 00010000_F}
  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 10_R = 10100000_F}
  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0{,}5_R = 00001000_F}
  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0{,}625_R = 00001010_F}
  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 16_R > 11111111_F}
  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0{,}06_R < 00000001_F}
  • Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 7{,}7_R \approx 01111011_F}

Wie man sieht, können also mit acht Bits und vier Vor- und Nachkommastellen nur Festkommazahlen zwischen Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0_R} und Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 15{,}9375_R} (bei einer Auflösung von Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0{,}0625_R} ) dargestellt werden. Dieser geringe Darstellungsbereich ist auch der entscheidende Nachteil gegenüber Gleitkommazahlen.

Weiterhin entstehen wie auch bei Gleitkommazahlen Rundungsfehler bei der Umwandlung der dezimalen, reellen Zahlen in eine binäre Festkommadarstellung. Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 7_R = 01110000_F} kann im Gegensatz zu Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0{,}7_R \approx 00001011_F} exakt dargestellt werden. Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0{,}7_R} kann allerdings bei noch so vielen Nachkommastellen nicht als Summe von Zweierpotenzen dargestellt werden. Um diese Probleme zu umgehen, kann aber bei Bedarf eine dezimale Festkommadarstellung eingesetzt werden.

Nomenklatur des Zahlenformats

Das Zahlenformat für Festkommazahlen mit einer Nachkommastelle wird auch als „Q1“ bezeichnet, mit zwei Nachkommastellen „Q2“ usw. Bei einer Wortlänge von mehreren Bits kann das Format noch genauer mit der Angabe der Vorkommastellen angegeben werden. Hierbei werden die Vor- und Nachkommastellen durch einen Punkt getrennt. Eine Festkommazahl mit acht Bits kann beispielsweise als „Q7.1“ bzw. „Q6.2“ bezeichnet werden.

Dezimale Festkommazahl

Insbesondere bei Geldbeträgen ist die Nutzung von dezimalen Festkommazahlen sinnvoll. Wird ein bestimmter Rechnungsbetrag beispielsweise zunächst mit einer Anzahlung und später mit einer Restzahlung beglichen, kann es bei Verwendung von Gleitkommazahlen vorkommen, dass aufgrund von Rundungsfehlern ein Restbetrag oder Guthaben von weit unter der kleinsten Währungseinheit übrig bleibt. Entsprechende Aufträge in einer Datenbank würde man später bei einer Suche nach nicht vollständig bezahlten Aufträgen (also mit Restbetrag ungleich 0) finden, da der Restbetrag sehr klein, aber eben nicht 0 ist.

In den meisten Programmiersprachen und Datenbanken gibt es darum einen Datentyp, der englisch Currency (dt.: Währung), Money (Geld) oder Decimal (Dezimalzahl) genannt wird. Ihm liegt eine Ganzzahl mit Vorzeichen (Signed Integer) zugrunde, meist von 64 Bit Länge. Zuweisung, Addition und Subtraktion zweier solcher Datentypen untereinander erfolgen wie bei einem Integer, ebenso Multiplikation von Festkommazahl und Integer sowie abrundende Division einer dezimalen Festkommazahl durch ein Integer. Bei anderen Operationen, die zudem unter Umständen verlustbehaftet sind, muss der Computer die Anzahl der Nachkommastellen beachten. Diese ist in manchen Sprachen frei definierbar. Falls dies nicht der Fall ist, hat der Datentyp üblicherweise vier Nachkommastellen und könnte informell als Zehntausendstel bezeichnet werden. Derzeit auf der Welt vorhandene Währungsuntereinheiten neben den weitverbreiteten Hundertsteln sind Fünftel (Mauretanien und Madagaskar) und in der MENA-Region Tausendstel (vgl. Dezimalwährung), die sich somit darstellen lassen. Der Wertebereich einer 64-Bit-Zahl mit vier Nachkommastellen ist −922.337.203.685.477,5808 bis 922.337.203.685.477,5807. Das ist rund das Zehnfache der Weltwirtschaftsleistung 2017 in Dollar. Eine 32-Bit-Zahl mit vier Nachkommastellen, in T-SQL beispielsweise smallmoney (wörtlich: kleines Geld) genannt, erlaubt Zahlen von −214.748,3648 bis 214.748,3647.

Siehe auch

Weblinks

Wiktionary: Festkommazahl – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen

Einzelnachweise

  1. Noel Giffin: Fractint: A Little Code, Limitations of Integer Math (And How We Cope). Nehee Enterprises. Archiviert vom Original am 19. Mai 2012.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.nahee.com Abgerufen am 9. Juli 2012.
  2. David Goldberg: What Every Computer Scientist Should Know About Floating-Point Arithmetic. In: ACM Computing Surveys. 23, 1991, S. 5–48. doi:10.1145/103162.103163. Abgerufen am 2. September 2010.
  3. What’s new in GnuCash 1.6?. gnucash.org. Abgerufen am 3. September 2010.