34
Einstieg in die Informatik mit Java Zahldarstellung und Rundungsfehler Gerd Bohlender Institut f ¨ ur Angewandte und Numerische Mathematik 1 / 34

Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Einstieg in die Informatik mit JavaZahldarstellung und Rundungsfehler

Gerd Bohlender

Institut fur Angewandte und Numerische Mathematik

1 / 34

Page 2: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Gliederung

1 Uberblick

2 Darstellung ganzer Zahlen, Stellenwertsystem

3 Uberlauf

4 Darstellung von Gleitkommazahlen

5 Rundungsfehler

2 / 34

Page 3: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Gliederung

1 Uberblick

2 Darstellung ganzer Zahlen, Stellenwertsystem

3 Uberlauf

4 Darstellung von Gleitkommazahlen

5 Rundungsfehler

3 / 34

Page 4: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Uberblick

In diesem Kapitel wird beschrieben, wie ganze Zahlen undGleitkommazahlen dargestellt und bearbeitet werden.

Ganze ZahlenDarstellung in Stellenwertsystem

GleitkommazahlenZahldarstellung nach Standard IEEE 754

FehlermoglichkeitenMogliche Fehler die beim Rechnen mit ganzen Zahlen undGleitkommazahlen auftreten konnen

RundungsfehlerRundungsfehler bei einzelnen Operationen und Auswirkungenin Programmen

4 / 34

Page 5: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Gliederung

1 Uberblick

2 Darstellung ganzer Zahlen, Stellenwertsystem

3 Uberlauf

4 Darstellung von Gleitkommazahlen

5 Rundungsfehler

5 / 34

Page 6: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung ganzer Zahlen, Stellenwertsystem

Gegeben sei eine ganzzahlige ”Basis“ b > 1. Jede endlicheganze Zahl x kann durch ihre ”b-adische Entwicklung“ imStellenwertsystem dargestellt werden

x = ±n∑

i=0

xi · bi = ±xnxn−1 . . . x2x1x0

Hierbei ist n ≥ 0 und xi eine der Ziffern 0 bis b − 1.Ist xn 6= 0, dann ist n + 1 die Stellenzahl zur Basis b.Neben dem Dezimalsystem (b = 10) werden in der Informatikhaufig verwendet• das Dualsystem (Binarsystem, b = 2)• das Hexadezimalsystem (b = 16)• in alteren Anwendungen auch das Oktalsystem (b = 8)

6 / 34

Page 7: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung ganzer Zahlen, Ziffern

Als ”Ziffern“ fur Basen b > 10 werden Buchstaben verwendet:A = 10, B = 11, ..., F = 15, ..., Z = 35

Groß- und Kleinbuchstaben werden nicht unterschieden.

Um Verwechslungen mit der Basis b zu vermeiden, verwendenwir hier vorzugsweise Großbuchstaben fur die Ziffern.

7 / 34

Page 8: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung ganzer Zahlen, Basis

Die Basis b wird in mathematischer Schreibweise als Indexangehangt, z.B.:

10102 = 1010, A016 = 16010

In Java wird bei Literalkonstanten die Basis durch den Prafix 0xfur Hexadezimalzahlen, 0 fur Oktalzahlen und ohne Prafix furDezimalzahlen gekennzeichnet, z.B.:

i n t i = 0123; / / Okta lzah l , dezimaler Wert 83i n t j = 0x100 ; / / Hexadezimalzahl , Wert 256i n t k = 0xAB ; / / 10∗16 + 11 = 171

8 / 34

Page 9: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung ganzer Zahlen, Basis

Werte mit anderer Basis (i.a. im Bereich 2 bis 36) konnen inJava als String geschrieben werden. Die Umwandlung erfolgtdurch Angabe der Basis als zweiter Parameter einerUmwandlungsfunktion.

Umwandlung String in interne Darstellung mit StandardfunktionInteger.parseInt (wert, basis)

i n t i = I n tege r . pa rse In t ( ” 100 ” , 16 ) ; / / 256i n t j = I n tege r . pa rse In t ( ” 100 ” , 2 ) ; / / 4

Umgekehrt Umwandlung interne Darstellung in String mitStandardfunktion Integer.toString (wert, basis)

S t r i n g s ;s = In tege r . t o S t r i n g (160 , 16 ) ; / / e r g i b t ”A0”s = In tege r . t o S t r i n g (9 , 2 ) ; / / e r g i b t ”1001”s = In tege r . t o S t r i n g (35 , 36 ) ; / / e r g i b t ”Z ”

9 / 34

Page 10: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung ganzer Zahlen, Umrechnung

Umrechnung von Basis b in Dezimalsystem: Formel auswerten.ABC16 = A · 16 · 16 + B · 16 + C

= 10 · 256 + 11 · 16 + 12= 2560 + 176 + 12= 274810

110012 = 1 · 2 · 2 · 2 · 2 + 1 · 2 · 2 · 2 + 0 · 2 · 2 + 0 · 2 + 1= 16 + 8 + 1= 2510

Multiplikationen sparen: Potenzen von b ausklammern!567816 = ((5 · 16 + 6) · 16 + 7) · 16 + 8

= ((80 + 6) · 16 + 7) · 16 + 8= (1376 + 7) · 16 + 8= 22128 + 8= 2213610

(allgemeines Verfahren: ”Hornerschema“)

10 / 34

Page 11: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung ganzer Zahlen, Umrechnung

Umrechnung in Basis b: Ziffern abdividieren. Beispiel:

i n t w = 100; / / Werti n t b = 8; / / BasisS t r i n g s = ” ” ; / / am Anfang l e e r e r S t r i n gwhile (w > 0) { / / berechnet 4 , 4 , 1

i n t z = w % b ; / / n iede rs te Z i f f e r bestimmens = z + s ; / / vor s davor haengenw = w / b ; / / von w abd i v i d i e ren

}/ / e r g i b t s = ”144”

Bei Basis b > 10 mussen ggf. Ziffern in die entsprechendenDarstellungen umgewandelt werden (Fallunterscheidung).

Als alternativer Algorithmus konnen auch die hochsten Ziffernzuerst bestimmt werden durch Vergleich mit Potenzen bk .

11 / 34

Page 12: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung in festem Zahlformat, negative Zahlen

In den Java-Datentypen byte, short, int, long wird die Basisb = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binarenZiffern) eingesetzt.

• 1 Bit Vorzeichen (0 = Plus, 1 = Minus)• n − 1 Bits fur den Wert

Negative Werte werden im ”Zweier-Komplement“ dargestellt;den Absolutbetrag einer negativen Zahl berechnet man:• alle Bits negieren (0 ↔ 1)• 1 addieren

12 / 34

Page 13: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Zahlbereich

Mit n Bits ist der Bereich −bn−1 . . . bn−1 − 1 darstellbar.Ausnahme: char ist ein vorzeichenloser Datentyp.

Typ n min maxbyte 8 −27 27 − 1short 16 −215 215 − 1int 32 −231 231 − 1long 64 −263 263 − 1char 16 0 216 − 1

13 / 34

Page 14: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Beispiel: Positive und negative Bytes

Beispiel byte

Bits Wert00000000 000000001 100000010 200000011 3. . . . . .01111111 12710000000 -12810000001 -127. . . . . .11111110 -211111111 -1

14 / 34

Page 15: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Gliederung

1 Uberblick

2 Darstellung ganzer Zahlen, Stellenwertsystem

3 Uberlauf

4 Darstellung von Gleitkommazahlen

5 Rundungsfehler

15 / 34

Page 16: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Uberlauf, Beispiel byte

Wird der darstellbare Bereich uberschritten (z.B. bei byteWerte < −128 oder > 127), dann entsteht ein Uberlauf.Achtung: Uberlauf wird in Java nicht erkannt, es wird ohneWarnung weitergerechnet!Berechnetes Ergebnis = untere n Bits des korrekten Ergebnis,also ±k · bn

Beispiel mit byte, berechnetes Ergebnis ist exaktes Ergebnis±k · 256:

Ausdruck erwartet berechnet127 + 1 128 -128127 + 2 129 -127100 · 2 200 -56100 · 5 500 -12

Das gleiche Problem tritt bei den anderen ganzzahligenDatentypen short, int, long, char auf, beim Uberschreiten derjeweiligen maximalen / minimalen darstellbaren Werte.

16 / 34

Page 17: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Explosion der Ariane 5 Rakete

Uberlauf kann zu katastrophalen Fehlern fuhren. Dieeuropaische Rakete Ariane 5 wurde beim Erstflug am 4. Juni1996 zerstort.Ablauf (siehe http://de.wikipedia.org/wiki/Ariane_V88):

• Steuersoftware (in Ada geschrieben) fur Ausrichtung derInertialplattform, wichtig fur Lagesteuerung

• Umwandlung einer 64-Bit-Gleitkomma-Variable in einevorzeichenbehaftete 16-Bit-Ganzzahl

• Uberlauf fuhrt zu starker Neigung der Rakete nach 37Sekunden Flug

• Zerstorung der Rakete nach weiteren 3 Sekunden in 4 kmHohe

• Verlust 290 Millionen Euro, keine Personenschaden

Steuersoftware war von Ariane 4 ubernommen, hat dortfunktioniert. Aber in Ariane 5 traten großere Werte auf.

17 / 34

Page 18: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Gliederung

1 Uberblick

2 Darstellung ganzer Zahlen, Stellenwertsystem

3 Uberlauf

4 Darstellung von Gleitkommazahlen

5 Rundungsfehler

18 / 34

Page 19: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung reeller Zahlen

Gegeben sei eine ganzzahlige ”Basis“ b > 1. Jede endlichereelle Zahl x kann durch ihre ”b-adische Entwicklung“ imStellenwertsystem dargestellt werden

x = ±n∑

i=−∞xi · bi = ±xnxn−1 . . . x2x1x0.x−1x−2x−3 . . .

Hierbei ist n ≥ 0 und xi eine der Ziffern 0 bis b − 1.

Ist xn 6= 0, dann ist n + 1 die Stellenzahl vor dem Dezimalpunkt(Komma) zur Basis b. Die Stellenzahl hinter dem Dezimalpunktist i.a. unendlich.

Die Darstellung ist i.a. nicht eindeutig, z.B. ist1.000 . . . = 0.999 . . .

Verwendete Basis ist meistens b = 10 oder b = 2.

19 / 34

Page 20: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung von Gleitkommazahlen

Im Computer werden reelle Zahlen durch Gleitkommazahlenmit endlicher Genauigkeit approximiert. Darstellung durch eine

”Mantisse“ m der Form x0.x1x2 . . . xn mit Mantissenlange n + 1und einen ”Exponenten“ emin ≤ e ≤ emax :

x = ±n∑

i=0

xi · b−i · be = ±x0.x1x2 . . . xn · be

Ist x0 6= 0, dann heißt die Zahl ”normalisiert“, sonst

”denormalisiert“.Die Java-Datentypen float bzw. double sind wie imIEEE-Standard 754 definiert (siehehttp://de.wikipedia.org/wiki/IEEE_754). Basis b = 2,insgesamt 32 bzw. 64 Bits (binaren Ziffern).

• 1 Bit Vorzeichen (0 = Plus, 1 = Minus)• 8 bzw. 11 Bits fur den Exponenten bei float bzw. double• restliche 23 bzw. 52 Bits fur die Mantisse

20 / 34

Page 21: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Darstellung negativer Gleitkommazahlen, Details

Negative Werte werden in Vorzeichen-Betragsdarstellungdargestellt; die Mantisse m enthalt den Absolutbetrag der Zahl.

Im Binarsystem ist bei normalisierten Zahlen die Ziffer x0 immer= 1, braucht also nicht gespeichert zu werden (”Hidden Bit“).Die Mantisse hat dann 24 bzw. 53 Bit bei float bzw. double

Zum Exponenten wird intern ein ”Bias“ addiert, so dass er ≥ 0wird.

Zahlen mit dem maximalen Exponenten emax stellen ±∞ bzw.NaN (not a number) dar.

Zahlen mit dem minimalen Exponenten emin stellen ±0 (es gilt−0.0 = +0.0 aber 1/(+0.0) = +∞, 1/(−0.0) = −∞) bzw.denormalisierte Zahlen dar (diese haben weniger gultigeStellen).

21 / 34

Page 22: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Uberlauf

Bei Gleitkommazahlen kann ebenfalls Uberlauf auftreten, wenndie betragsgroßte darstellbare Zahl uberschritten wird.

Bei Uberlauf wird kein unsinniges negatives Ergebniseingesetzt (wie bei ganzen Zahlen) sondern der spezielle Wert+∞ bzw. −∞. Damit kann in der Regel normal weitergerechnet werden.

In manchen Fallen kann auch dies zu stark verfalschtenErgebnissen fuhren. Beispiel• x = 1e308 ist eine sehr große aber noch darstellbare Zahl• y = x + x fuhrt zu Uberlauf, Ergebnis +∞• z = y − x liefert +∞, obwohl das Ergebnis 1e308

darstellbar ware

22 / 34

Page 23: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Weitere Ausnahme-Situationen

Weitere mogliche Ausnahme-Situationen und ihre ublicheBehandlung:• Unterlauf (Exponent zu klein), es wird mit 0 weiter

gerechnet• Division durch 0: es wird mit Unendlich weiter gerechnet• Illegale Operation (0/0, ∞−∞, usw.): es wird NaN (not a

number) als Ersatzergebnis eingesetzt• Ungenaues Ergebnis: dies ist fast immer der Fall und wird

ignoriert

Java verwendet diese Standard-Behandlung. ImIEEE-Standard 754 sind auch andere Behandlungs-Variantenvorgesehen.

23 / 34

Page 24: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Gliederung

1 Uberblick

2 Darstellung ganzer Zahlen, Stellenwertsystem

3 Uberlauf

4 Darstellung von Gleitkommazahlen

5 Rundungsfehler

24 / 34

Page 25: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Maschinengenauigkeit

Zwei aufeinanderfolgende Gleitkommazahlen sind

x = 1.000 . . . 00

x = 1.000 . . . 01

Die Differenz beschreibt die relative Genauigkeit desZahlsystems: ”Maschinengenauigkeit“ oder

”Maschinen-Epsilon“ ε = 2−n bei n Nachkommastellen.

Typ ε dezimal etwafloat 2−23 1.2 · 10−7

double 2−52 2.2 · 10−16

Dies entspricht etwa 7 Dezimalstellen bei float und knapp 16Dezimalstellen bei double.Gelegentlich wird auch die Halfte dieses Werts alsMaschinengenauigkeit verwendet (also 2−24 bei float und2−53 bei double).

25 / 34

Page 26: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Rundung

Ergebnisse von Eingabe, Operationen, Ausgabe sind in derRegel nicht mit der vorhandenen Maschinengenauigkeitdarstellbar.

Beispiele:• Summe 1 + 1e20 in double; benotigt etwa 63 Bit zur

exakten Darstellung, double hat aber nur 53 Bit• Produkt zweier beliebiger Zahlen vom Typ double, ergibt

einen Wert mit 2 · 53 = 106 Bit Mantisse; es sind aber nur53 Bit in double fur das Ergebnis vorhanden

26 / 34

Page 27: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Rundung

Das exakte Ergebnis wird durch eine ”Rundung“ auf eine derbeiden benachbarten Maschinenzahlen abgebildet.

Rundungen nach IEEE-Standard 754:• Rundung nach unten (in Richtung −∞)• Rundung nach oben (in Richtung +∞)• Rundung durch Abschneiden (in Richtung 0)• Rundung zur nachstgelegenen Gleitkommazahl

Liegt das Ergebnis einer Operation genau in der Mitte zwischenzwei Gleitkommazahlen, dann wird bei der Rundung zurnachstgelegenen Gleitkommazahl auf das Ergebnis mitgerader Endziffer gerundet.

Java verwendet fur float und double immer die Rundung zurnachstgelegenen Gleitkommazahl.

27 / 34

Page 28: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Rundungsfehler, Abschatzung

Bezeichnet fl(x ◦ y) die Gleitkomma-Auswertung einerOperation x ◦ y , dann gilt fur den relativen Fehler

|fl(x ◦ y)− (x ◦ y)||x ◦ y |

< ε

bzw. bei Rundung zur nachstgelegenen Gleitkommazahl

|fl(x ◦ y)− (x ◦ y)||x ◦ y |

< ε/2

Also umgeformt

fl(x ◦ y) = (x ◦ y) · (1 + e) mit |e| < ε

bzw. bei Rundung zur nachstgelegenen Gleitkommazahl

fl(x ◦ y) = (x ◦ y) · (1 + e) mit |e| < ε/2

28 / 34

Page 29: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Rundungsfehler, Abschatzung bei mehrerenOperationen

Die Rundungsfehler-Abschatzungen gelten nur fur eineeinzelne Operation!

WarnungEs ist sehr schwierig, den Rundungsfehler nach mehrerenOperationen abzuschatzen!

Rundungsfehler nach k Operationen• bei Rundung zur nachstgelegenen Gleitkommazahl

konnen sich Rundungsfehler z.T. gegeneinanderaufheben, der relative Fehler ist dann < k · ε

• in ungunstigen Fallen konnen Rundungsfehler sehr starkanwachsen, der relative Fehler ist dann >> k · ε

• insbesondere bei Subtraktion von etwa gleich großenWerten: Genauigkeitsverlust durch ”Ausloschung“ gultigerZiffern

29 / 34

Page 30: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Rundungsfehler, Ausloschung

Beispiel (3-stellige Dezimalzahlen):

1.23 als Naherung fur 1.23456, 3 Stellen genau1.22 als Naherung fur 1.21613, 3 Stellen genau0.01 Differenz dieser Werte, max. 1 Stelle genau1e − 2 im Gleitkommaformat

Die exakte Differenz ware 0.01843, also 1.84e − 2 imGleitkommaformat. Durch katastrophale Ausloschung ist dasErgebnis extrem ungenau (relativer Fehler etwa 80 Prozentstatt erwarteten 1 Prozent).

Beispiel (double):

fl(1 + 1020 − 1020) = 1020 − 1020 = 0

30 / 34

Page 31: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Gultigkeit mathematischer Eigenschaften

Bei Gleitkomma-Rechnung versagen viele mathematischeRegeln wie Assoziativitat, Distributivitat, usw. Es gilt z.B.

1 = fl(1 + (1020 − 1020)) 6= fl((1 + 1020)− 1020) = 0

Bei Gleitkomma-Rechnung gelten Konvergenzaussagen (Folgeoder Reihe konvergiert gegen Grenzwert) nicht mehr.• numerisch berechnete Folge kann ab einem Index k

konstant bleiben• oder sogar divergieren durch Einfluss von

Rundungsfehlern

31 / 34

Page 32: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Rundungsfehler, Beispiel

Berechne die einfache Formel

p2 − 2 · q2

fur p = 665857.0 und q = 470832.0Das berechnete Ergebnis mit float ist 0.0Das exakte Ergebnis ist 1.0. In diesem Fall liefert double dasexakte Ergebnis.

Quadriert man die Formel, so erhalt man nach der binomischenFormel

p4 − 4 · p2 · q2 + 4 · q4

Mit den gleichen Werten von p und q ist das exakte Ergebnisoffenbar 1, das berechnete Ergebnis mit double ist−3.3554432E7, also falsches Vorzeichen und 7Zehnerpotenzen zu groß (Fehler uber 3 000 000 000 Prozent)!Nach nur 13 arithmetischen Operationen!

32 / 34

Page 33: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Rundungsfehler, Beispiel Patriot-Rakete

Rechenfehler in einer Patriot-Rakete der US-Armee, die zurAbwehr von Scud-Raketen dient• Zeit wird in der Rakete als float Wert mit 32 Bit

Genauigkeit abgespeichert• Uhr zahlt mit Zehntelsekunden• Rechenfehler akkumulieren sich uber mehrere Stunden• zum Einsatzzeitpunkt war die Zeitabweichung 0.34

Sekunden• die angreifende irakische Scud-Rakete fliegt mit 6000 km/h• 0.34 Sekunden entspricht etwa 500 m Weg• daher wurde die Abfangrakete nicht gestartet• Resultat: 28 Tote, 100 Verletzte

Weitere Beispiele fur Rechenfehler mit katastrophalenAuswirkungen siehe http://www.dradio.de/aktuell/791580/

33 / 34

Page 34: Einstieg in die Informatik mit Java - math.kit.edu · In den Java-Datentypen byte, short, int, long wird die Basis b = 2 und eine feste Anzahl von n = 8, 16, 32, 64 Bits (binaren¨

Genauigkeit vs. Sicherheit

Genauigkeit = Abweichung des berechneten Wertes vomexakten WertSicherheit / Verifikation des Ergebnisses = strikter Beweis, dassErgebnis existiert und maximal um x Prozent vom berechnetenabweicht

Dies sind unabhangige Paradigmen, sei z.B. das exakteErgebnis 1• das berechnete Ergebnis 1.00000000000001 ist extrem

genau, aber eventuell unsicher / nicht verifiziert, wennkeine Fehlerabschatzung bekannt ist

• das berechnete Ergebnis 2 ist sehr ungenau, abereventuell ist es sicher / verifiziert, falls eine rigoroseFehlerabschatzung existiert

34 / 34