cpp / expert
Snippet
Benutzerdefinierte Festkommadarstellung für eingebettete Arithmetik
In ressourcenbeschränkten Umgebungen ohne Gleitkommaeinheit (FPU) bietet die Festkomma-Arithmetik eine performante Alternative zur Fließkomma-Mathematik. Dieses Snippet verwendet einen Template-Parameter, um die Präzision (Anzahl der Nachkommastellen) zur Kompilierzeit zu definieren, was optimierte Ganzzahl-Arithmetik zur Simulation von Dezimalwerten ermöglicht.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<int FractionalBits>struct FixedPoint {int32_t raw;explicit constexpr FixedPoint(float val): raw(static_cast<int32_t>(val * (1 << FractionalBits) + (val >= 0 ? 0.5f : -0.5f))) {}constexpr float toFloat() const {return static_cast<float>(raw) / (1 << FractionalBits);}FixedPoint operator+(FixedPoint other) const {FixedPoint res;res.raw = this->raw + other.raw;return res;}private:FixedPoint() : raw(0) {}};
Erklärung
1
template<int FractionalBits>
Definiert den festen Skalierungsfaktor zur Kompilierzeit für maximale Effizienz.
2
raw(static_cast<int32_t>(val * (1 << FractionalBits) ...))
Konvertiert einen Float in seine interne Ganzzahldarstellung durch Linksschieben.