prev up next

Previous: Ganze Zahlen ( byte, short, int, long) Up: Einfache Datentypen Next: Boolean ( boolean)

Unterabschnitte


Gleitkommazahlen ( float, double)

Die Typen float und double dienen zur Speicherung von Gleitkommazahlen nach dem IEEE-Standard 754-1985 in der Form Vorzeichen, Exponent, Mantisse.

Codierung

Bei der Codierung für 32 Bits ( float) benötigt das Vorzeichen 1 Bit, der Exponent 8 Bits, die Mantisse 23 Bits.
X XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX
Vorzeichen s Exponent e Mantisse f

Wert =

Bei einer normalisierten Darstellung liegt der Wert der Mantisse 1.f im Intervall [1, 2[.

Hierbei haben Dualzahlen nach dem Komma

0.d-1d-2d-3...d-k die Bedeutung di . 2i

Algorithmus dezimal dual:

Sei Dezimalzahl x gegeben. Bestimme größte 2-er Potenz 2d mit 2d x. Setze f = (x - 2d)/2d. Offenbar gilt

x = (1 + f ) . 2d mit 0 f < 1.

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');
}

Beispiel:
Sei x = 13.5 gegeben. Als Codierung ergibt sich

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

2 . 2254 - 127 = 2128 1038

0 11111110 11111111111111111111111
Vorzeichen Exponent Mantisse
Die kleinste darstellbare positive Zahl lautet

2-23 . 2-126 = 2-149 10-45

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

Wert =

Damit liegt die größte darstellbare positive Zahl knapp unter

2 . 22046 - 1023 10308

Die kleinste darstellbare positive Zahl lautet

2-52 . 2-1022 = 2-1074 10-324

Operatoren

+ : 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).

Konstantenbezeichner

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:


prev up next
Previous: Ganze Zahlen ( byte, short, int, long) Up: Einfache Datentypen Next: Boolean ( boolean)