IEEE 754 – 32-Bit Float (Single Precision)¶
Der IEEE 754 Standard definiert das am weitesten verbreitete Format zur Darstellung von Gleitkommazahlen in digitalen Systemen. Die 32-Bit-Variante (Single Precision) wird in Embedded-Systemen, Sensordaten und Protokollen wie BLE häufig verwendet.
1. Bitstruktur¶
Bit: 31 30 23 22 0
┌────────┬─────────┬───────────────────────┐
│ Sign │Exponent │ Mantissa │
│ 1 Bit │ 8 Bit │ 23 Bit │
└────────┴─────────┴───────────────────────┘
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
| Feld | Bits | Beschreibung |
|---|---|---|
| Sign (S) | 1 | 0 = positiv, 1 = negativ |
| Exponent (E) | 8 | Gespeichert mit Bias 127 (Excess-127) |
| Mantissa (M) | 23 | Nachkommastellen der normalisierten Zahl |
2. Berechnung des Wertes¶
Normalisierte Zahlen (E ≠ 0 und E ≠ 255)¶
$$\text{Wert} = (-1)^S \times 2^{(E - 127)} \times (1{,}M)$$
Die führende 1 vor der Mantissa ist implizit – sie wird nicht gespeichert (Hidden Bit).
Beispiel: 0 10000000 10000000000000000000000
S = 0 → positiv
E = 10000000₂ = 128 → Exponent = 128 - 127 = 1
M = 10000000... → 1,5 (implizite 1 + 0,5)
Wert = +1 × 2¹ × 1,5 = 3,0
Denormalisierte Zahlen (E = 0, M ≠ 0)¶
Für sehr kleine Zahlen nahe null – keine implizite führende 1:
$$\text{Wert} = (-1)^S \times 2^{-126} \times (0{,}M)$$
3. Spezialbelegungen¶
| S | Exponent E | Mantissa M | Bedeutung |
|---|---|---|---|
| 0 | 00000000 |
000...0 |
+0 |
| 1 | 00000000 |
000...0 |
−0 |
| 0 | 00000000 |
≠ 0 | +Denormalisiert |
| 1 | 00000000 |
≠ 0 | −Denormalisiert |
| 0 | 11111111 |
000...0 |
+∞ (Infinity) |
| 1 | 11111111 |
000...0 |
−∞ (Infinity) |
| × | 11111111 |
≠ 0 | NaN (Not a Number) |
4. Wertebereich & Genauigkeit¶
| Eigenschaft | Wert |
|---|---|
| Kleinste positive normalisierte Zahl | ≈ 1,18 × 10⁻³⁸ |
| Größte positive Zahl | ≈ 3,40 × 10³⁸ |
| Kleinste denormalisierte Zahl | ≈ 1,40 × 10⁻⁴⁵ |
| Dezimale Genauigkeit | ≈ 7 signifikante Stellen |
| Epsilon (kleinste darstellbare Differenz zu 1,0) | ≈ 1,19 × 10⁻⁷ |
5. Beispiele¶
| Dezimalwert | Binär (S · E · M) | Hex |
|---|---|---|
0.0 |
0 00000000 00000000000000000000000 |
0x00000000 |
1.0 |
0 01111111 00000000000000000000000 |
0x3F800000 |
-1.0 |
1 01111111 00000000000000000000000 |
0xBF800000 |
2.0 |
0 10000000 00000000000000000000000 |
0x40000000 |
0.5 |
0 01111110 00000000000000000000000 |
0x3F000000 |
3.14159 |
0 10000000 10010000111111011010111 |
0x40490FDB |
+∞ |
0 11111111 00000000000000000000000 |
0x7F800000 |
NaN |
0 11111111 10000000000000000000000 |
0x7FC00000 |
6. Byte-Reihenfolge (Endianness)¶
Ein 32-Bit Float belegt 4 Bytes. Die Reihenfolge im Speicher hängt von der Plattform ab:
Beispiel: 1.0 = 0x3F800000
| Format | Byte 0 | Byte 1 | Byte 2 | Byte 3 |
|---|---|---|---|---|
| Big Endian | 0x3F |
0x80 |
0x00 |
0x00 |
| Little Endian | 0x00 |
0x00 |
0x80 |
0x3F |
⚠️ BLE überträgt Daten standardmäßig Little Endian – bei der Übertragung von Float-Werten in BLE-Paketen (z.B. taskit BLE Manufacturer Advertisement) ist dies zu beachten.
7. Konvertierung – Schritt für Schritt¶
Dezimal → IEEE 754 (Beispiel: −6.5)
1. Vorzeichen: negativ → S = 1
2. Betrag in Binär: 6.5 = 110.1₂
3. Normalisieren: 1.101 × 2²
└─┤ Exponent = 2
4. Exponent speichern: E = 2 + 127 = 129 = 10000001₂
5. Mantissa (ohne führende 1): 101 00000000000000000000
6. Ergebnis:
S=1 E=10000001 M=10100000000000000000000
→ 1 10000001 10100000000000000000000
→ 0xC0D00000
8. Verwendung in Embedded / BLE¶
In Sensordaten (z.B. Measure2Go, taskit BLE Manufacturer Advertisement) wird IEEE 754 Float oft durch ganzzahlige Festkomma-Werte ersetzt, um: - Speicherplatz zu sparen (2 Byte int16 statt 4 Byte float) - Berechnungsaufwand auf Mikrocontrollern zu reduzieren - Endianness-Probleme zu vermeiden
Beispiel: Temperatur 24,7 °C als int16 mit Faktor 10:
24,7 °C × 10 = 247 = 0x00F7 (2 Bytes statt 4)
9. Vergleich: Float-Formate im Überblick¶
| Format | Bits | Exponent | Mantissa | Genauigkeit |
|---|---|---|---|---|
| Half Precision | 16 | 5 | 10 | ≈ 3 Stellen |
| Single Precision | 32 | 8 | 23 | ≈ 7 Stellen |
| Double Precision | 64 | 11 | 52 | ≈ 15 Stellen |
| Extended | 80 | 15 | 64 | ≈ 18 Stellen |