Fixed-Point-Arithmetik
22.11.2025 4 Min. Lesezeit
Fixed-Point-Arithmetik - Die heimlichen Helden der frühen Spieleentwicklung
In den vorherigen Abschnitten haben wir gesehen, dass moderne Systeme stark auf Fließkommazahlen setzen und dass deren Effizienz eng mit der Wortbreite verknüpft ist. Doch in der Frühzeit der Computer - insbesondere während der Ära der „Bit Wars“ - spielte ein anderer Ansatz eine zentrale Rolle:
Fixed-Point-Arithmetik
Sie war lange Zeit die praktische Antwort auf ein Problem, das wir heute oft als selbstverständlich betrachten: Wie rechnet man effizient mit Kommazahlen, wenn die Hardware dafür eigentlich nicht gemacht ist?
Das Grundprinzip: Komma ohne Komma
Der Begriff „Fixed Point“ bedeutet wörtlich:
Der Dezimalpunkt (genauer: Binärpunkt) hat eine feste Position.
Statt eine Zahl flexibel in Mantisse und Exponent aufzuteilen (wie bei Float), wird bei Fixed-Point einfach festgelegt:
- Ein Teil der Bits gehört zum Ganzzahlanteil
- Ein Teil gehört zum Nachkommaanteil
Beispiel (16 Bit insgesamt):
[ 8 Bit ganzzahlig ][ 8 Bit Bruchteil ]
Die Zahl wird dann interpretiert als:
Wert = gespeicherter Integer / 2^8
Ein konkretes Beispiel
Angenommen, wir speichern die Zahl:
Wert = 1.5
In einem Fixed-Point-System mit 8 Nachkommabits:
1.5 × 2^8 = 384
Gespeichert wird also:
384 (als Integer)
Beim Lesen wird zurückgerechnet:
384 / 256 = 1.5
Der Computer sieht also weiterhin nur eine Ganzzahl - aber wir interpretieren sie als Kommazahl.
Warum war das so wichtig?
Frühe Prozessoren (8- und 16-Bit) hatten ein großes Problem:
Sie konnten keine Fließkomma-Arithmetik in Hardware.
Das bedeutete:
- Float-Berechnungen mussten in Software emuliert werden
- Das war extrem langsam
- Es verbrauchte viel Speicher
Fixed-Point bot dagegen entscheidende Vorteile.
Die drei großen Vorteile von Fixed-Point
1. Geschwindigkeit
Integer-Operationen sind extrem schnell, da sie direkt von der CPU unterstützt werden.
Fixed-Point nutzt genau diese Stärke:
- Addition → normale Integer-Addition
- Subtraktion → normale Integer-Subtraktion
- Multiplikation → mit einfacher Skalierungskorrektur
Ergebnis: um Größenordnungen schneller als Software-Floats
2. Determinismus
Ein oft unterschätzter Vorteil:
Fixed-Point ist vollständig deterministisch und exakt.
Während Floats Rundungsfehler einführen, gilt bei Fixed-Point:
- gleiche Eingabe → exakt gleiche Ausgabe
- keine versteckten Rundungsartefakte
Das ist besonders wichtig in:
- Spielen (Reproduzierbarkeit)
- eingebetteten Systemen
- Steuerungslogik
3. Speicherkontrolle
Bei Fixed-Point weiß man genau:
- wie viele Bits für Ganzzahlen reserviert sind
- wie viele Bits für Nachkommastellen
Das ermöglicht präzise Kontrolle über:
- Wertebereiche
- Genauigkeit
Der große Nachteil: Begrenzung und Aufwand
Diese Vorteile haben jedoch ihren Preis.
Feste Skala
Das größte Problem:
Die Position des „Kommas“ ist fix.
Das bedeutet:
- kleiner Wertebereich ODER
- geringe Genauigkeit
Du musst dich entscheiden.
Manuelle Skalierung
Der Entwickler muss ständig darauf achten:
- wann Werte skaliert werden müssen
- wann nach einer Multiplikation wieder geteilt wird
Fehler hierbei führen schnell zu:
- Überläufen
- falschen Ergebnissen
- schwer auffindbaren Bugs
Fixed-Point in der Praxis: Spieleentwicklung
In der Ära der Bit Wars war Fixed-Point allgegenwärtig.
Bewegung und Physik
Frühe Spiele wollten flüssige Bewegung darstellen:
Problem:
- Pixel sind ganzzahlig
- Bewegung ist kontinuierlich
Lösung:
Position = 100.25 Pixel
Intern:
100.25 × 256 = 25664
Damit konnte man:
- sanfte Bewegung berechnen
- aber dennoch effizient auf Integer-Hardware arbeiten
3D-Grafik (späte Phase)
Selbst frühe 3D-Engines (z. B. auf PlayStation 1):
- nutzten massiv Fixed-Point
- weil Floating Point zu langsam war
Die gesamte Transformationsmathematik lief oft in Integerarithmetik mit Skalierung.
Warum Floats Fixed-Point verdrängt haben
Mit zunehmender Wortbreite (32 Bit, 64 Bit) änderte sich die Situation:
- Prozessoren bekamen Floating Point Units (FPUs)
- Float-Operationen wurden hardwarebeschleunigt
- Programmierung wurde deutlich einfacher
Plötzlich galt:
Warum mühsam skalieren, wenn die Hardware das für uns übernimmt?
Dennoch: Fixed-Point ist nicht tot
Auch heute hat Fixed-Point seinen Platz:
Embedded Systems
In Mikrocontrollern ohne FPU:
- günstiger
- schneller
- energieeffizienter
Echtzeitsysteme
Wenn absolute Vorhersagbarkeit nötig ist:
- keine Rundungsüberraschungen
- keine plötzlichen Genauigkeitsverluste
Spezialfälle (z. B. Audio, DSP)
Digitale Signalverarbeitung nutzt oft Fixed-Point:
- exakt definierte Präzision
- optimale Nutzung begrenzter Hardware
Verbindung zum großen Ganzen
Mit Fixed-Point schließt sich ein wichtiger Kreis: Wir haben gesehen:
Integer → exakt, aber keine Brüche
Float → flexibel, aber ungenau
Fixed-Point → Kompromiss aus beiden
Und genau hier zeigt sich ein zentrales Prinzip der Informatik:
Jede Darstellung von Zahlen ist ein Kompromiss zwischen Genauigkeit, Geschwindigkeit und Speicher.
Ein mentales Gesamtbild
Du kannst dir die drei Systeme so vorstellen:
Integer → „Ganzzahlwelt“ - schnell und exakt, aber grob
Fixed-Point → „Lineal mit festem Maß“ - präzise, aber begrenzt
Floating Point → „flexibles Maßband“ - vielseitig, aber nicht exakt
Fazit: Die unsichtbare Grundlage vieler Klassiker
Die Spiele der 8-, 16- und oft auch 32-Bit-Ära hätten ohne Fixed-Point so nicht existieren können. Es war die Brücke zwischen:
- den begrenzten Möglichkeiten der Hardware
- und dem Wunsch nach flüssiger, realistischer Darstellung
Und auch wenn es heute oft im Schatten moderner Floating-Point-Systeme steht, bleibt Fixed-Point ein hervorragendes Beispiel dafür, wie:
clevere Repräsentation die Grenzen der Hardware überwinden kann - lange bevor diese selbst leistungsfähig genug ist.