| X | XXXXXXXX | XXXXXXXXXXXXXXXXXXXXXXX |
| Vorzeichen s | Exponent e | Mantisse f |
Bei einer normalisierten Darstellung liegt der Wert der Mantisse 1.f im Intervall [1, 2[.
Hierbei haben Dualzahlen nach dem Komma
Algorithmus dezimal
dual:
Sei Dezimalzahl x gegeben.
Bestimme größte 2-er Potenz 2d mit
2d
x.
Setze
f = (x - 2d)/2d.
Offenbar gilt
Bestimme die Dualzahl-Bits von f durch
for (i = 0; i < 23; i++) {
f = f * 2.0;
if (f >= 1.0) {IO.print('1'); f = f - 1.0;}
else IO.print('0');
}
| s | = | 0 | |
| f | = | (13.5 - 23)/23 = 0.6875 = |
|
| e | = | 3 + 127 = 130 |
| 0 | 10000010 | 10110000000000000000000 |
| Vorzeichen | Exponent | Mantisse |
Bei einer subnormalisierten Darstellung liegt der Wert der Mantisse 0.f im Intervall [0, 1[.
Exponent e = 0 und Mantisse f = 0 repräsentieren
die vorzeichenbehaftete Null.
Exponent e = 255 und Mantisse f = 0 repräsentieren
das vorzeichenbehaftete Unendlich(
+
, -
).
Exponent e = 255 und Mantisse f
0 repräsentieren
die undefinierte Zahl NaN (not a number).
Beispiel: 2-130 = 1/16 . 2-126
Daraus folgt
| s | = | 0 | |
| f | = | 0.0625 = 1/16 | |
| e | = | 0 |
Codierung
| 0 | 00000000 | 00010000000000000000000 |
| Vorzeichen | Exponent | Mantisse |
Die größte darstellbare positive Zahl liegt knapp unter
| 0 | 11111110 | 11111111111111111111111 |
| Vorzeichen | Exponent | Mantisse |
| 0 | 00000000 | 00000000000000000000001 |
| Vorzeichen | Exponent | Mantisse |
Bei der Codierung für 64 Bits ( double) benötigt das Vorzeichen 1 Bit, der Exponent 11 Bits, die Mantisse 52 Bits.
| X | XXXXXXXXXXX | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| Vorzeichen s | Exponent e | Mantisse f |
Damit liegt die größte darstellbare positive Zahl knapp unter
Die kleinste darstellbare positive Zahl lautet
| + | : | Gleitkomma x Gleitkomma |
|
Gleitkomma | Addition |
| - | : | Gleitkomma x Gleitkomma |
|
Gleitkomma | Subtraktion |
| * | : | Gleitkomma x Gleitkomma |
|
Gleitkomma | Multiplikation |
| / | : | Gleitkomma x Gleitkomma |
|
Gleitkomma | Division |
| % | : | Gleitkomma x Gleitkomma |
|
Gleitkomma | Modulo |
| ++ | : | Gleitkomma |
|
Gleitkomma | Inkrement um 1.0 |
| -- | : | Gleitkomma |
|
Gleitkomma | Dekrement um 1.0 |
Multiplikation: (Exponenten addieren, Mantissen multiplizieren)
| Beispiel: | 12 | * | 20 | = | ||
| 1.5 . 23 | * | 1.25 . 24 | = | |||
| 1.5 . 1.25 | * | 23 . 24 | = | |||
| 1.875 | * | 27 | = | 240 |
Addition: (Exponenten angleichen, Mantissen addieren)
| Beispiel: | 12 | + | 20 | = | ||
| 1.5 . 23 | + | 1.25 . 24 | = | |||
| 0.75 . 24 | + | 1.25 . 24 | = | |||
| (0.75 + 1.25) | * | 24 | = | |||
| 1 | * | 25 | = | 32 |
Problem beim Angleichen der Exponenten:
| Beispiel: | 1024 | + |
|
= | ||
| 1 . 210 | + | 1 . 2-20 | = | |||
| 1 . 210 | + | 2-30 . 210 | = | |||
| 1 . 210 | + | 0 . 210 | = | 1024 |
Bei 23 Bits für die Mantisse ist 2-30 nicht mehr darstellbar.
Gleitkommaoperationen stoßen in Java keine Ausnahmebehandlung an.
D.h., Division durch Null führt nicht zum Abbruch, sondern ergibt den
Wert +
bzw. -
;
Null dividiert durch Null ergibt NaN (not a number).
| Beispiele: | .2 | ||||
| 2 | |||||
| 2. | |||||
| 2.0 | |||||
| 2.538 | |||||
| 2.538f | |||||
| 2.5E2 | = | 2.5*102 | = | 250 | |
| 2.5E-2 | = | 2.5*10-2 | = | 0.025 |
Source:
Gleitkomma.java
JavaDoc:
Gleitkomma.html
Applet: