Rheinwerk Computing < openbook >


 
Inhaltsverzeichnis
Materialien
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Arrays und ihre Anwendungen
5 Der Umgang mit Zeichenketten
6 Eigene Klassen schreiben
7 Objektorientierte Beziehungsfragen
8 Ausnahmen müssen sein
9 Geschachtelte Typen
10 Besondere Typen der Java SE
11 Generics<T>
12 Lambda-Ausdrücke und funktionale Programmierung
13 Architektur, Design und angewandte Objektorientierung
14 Java Platform Module System
15 Die Klassenbibliothek
16 Einführung in die nebenläufige Programmierung
17 Einführung in Datenstrukturen und Algorithmen
18 Einführung in grafische Oberflächen
19 Einführung in Dateien und Datenströme
20 Einführung ins Datenbankmanagement mit JDBC
21 Bits und Bytes, Mathematisches und Geld
22 Testen mit JUnit
23 Die Werkzeuge des JDK
A Java SE-Module und Paketübersicht
Stichwortverzeichnis


Download:

- Listings, ca. 2,7 MB


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil21 Bits und Bytes, Mathematisches und Geld
Pfeil21.1 Bits und Bytes
Pfeil21.1.1 Die Bit-Operatoren Komplement, Und, Oder und XOR
Pfeil21.1.2 Repräsentation ganzer Zahlen in Java – das Zweierkomplement
Pfeil21.1.3 Das binäre (Basis 2), oktale (Basis 8), hexadezimale (Basis 16) Stellenwertsystem
Pfeil21.1.4 Auswirkung der Typumwandlung auf die Bit-Muster
Pfeil21.1.5 Vorzeichenlos arbeiten
Pfeil21.1.6 Die Verschiebeoperatoren
Pfeil21.1.7 Ein Bit setzen, löschen, umdrehen und testen
Pfeil21.1.8 Bit-Methoden der Integer- und Long-Klasse
Pfeil21.2 Fließkomma-Arithmetik in Java
Pfeil21.2.1 Spezialwerte für Unendlich, Null, NaN
Pfeil21.2.2 Standardnotation und wissenschaftliche Notation bei Fließkommazahlen *
Pfeil21.2.3 Mantisse und Exponent *
Pfeil21.3 Die Eigenschaften der Klasse Math
Pfeil21.3.1 Attribute
Pfeil21.3.2 Absolutwerte und Vorzeichen
Pfeil21.3.3 Maximum/Minimum
Pfeil21.3.4 Runden von Werten
Pfeil21.3.5 Rest der ganzzahligen Division *
Pfeil21.3.6 Division mit Rundung in Richtung negativ unendlich, alternativer Restwert *
Pfeil21.3.7 Multiply-Accumulate
Pfeil21.3.8 Wurzel- und Exponentialmethoden
Pfeil21.3.9 Der Logarithmus *
Pfeil21.3.10 Winkelmethoden *
Pfeil21.3.11 Zufallszahlen
Pfeil21.4 Genauigkeit, Wertebereich eines Typs und Überlaufkontrolle *
Pfeil21.4.1 Der größte und der kleinste Wert
Pfeil21.4.2 Überlauf und alles ganz exakt
Pfeil21.4.3 Was bitte macht eine ulp?
Pfeil21.5 Zufallszahlen: Random, SecureRandom und SplittableRandom
Pfeil21.5.1 Die Klasse Random
Pfeil21.5.2 Random-Objekte mit dem Samen aufbauen
Pfeil21.5.3 Einzelne Zufallszahlen erzeugen
Pfeil21.5.4 Pseudo-Zufallszahlen in der Normalverteilung *
Pfeil21.5.5 Strom von Zufallszahlen generieren *
Pfeil21.5.6 Die Klasse SecureRandom *
Pfeil21.5.7 SplittableRandom *
Pfeil21.6 Große Zahlen *
Pfeil21.6.1 Die Klasse BigInteger
Pfeil21.6.2 Beispiel: Ganz lange Fakultäten mit BigInteger
Pfeil21.6.3 Große Fließkommazahlen mit BigDecimal
Pfeil21.6.4 Mit MathContext komfortabel die Rechengenauigkeit setzen
Pfeil21.6.5 Noch schneller rechnen durch mutable Implementierungen
Pfeil21.7 Mathe bitte strikt *
Pfeil21.7.1 Strikte Fließkommaberechnungen mit strictfp
Pfeil21.7.2 Die Klassen Math und StrictMath
Pfeil21.8 Geld und Währung
Pfeil21.8.1 Geldbeträge repräsentieren
Pfeil21.8.2 ISO 4217
Pfeil21.8.3 Währungen in Java repräsentieren
Pfeil21.9 Zum Weiterlesen
 

Zum Seitenanfang

21.7    Mathe bitte strikt * Zur vorigen ÜberschriftZur nächsten Überschrift

Bei der Berechnung mit Fließkommazahlen schreibt die Definition des IEEE-754-Standards vor, wie numerische Berechnungen durchgeführt werden. Damit soll die CPU/FPU für float und double mit 32 bzw. 64 Bit rechnen. Auf der PC-Seite kommen Intel und AMD mit internen Rechengenauigkeiten von 80 Bit, also 10 Byte, zum Zuge.[ 279 ](Dieses Dilemma betrifft aber nur 80x86- und andere CISC-Prozessoren. Bei RISC sind 32 Bit und 64 Bit das Übliche. ) Die 80-Bit-Lösung bringt in Java zwei Nachteile mit sich:

  • Diese Genauigkeit kann Java bisher nicht nutzen.

  • Wegen der starren IEEE-754-Spezifikation kann der Prozessor weniger Optimierungen durchführen, weil er sich immer eng an die Norm halten muss. Das kostet Zeit. Gegebenenfalls sehen aber die mathematischen Ergebnisse auf unterschiedlichen Maschinen anders aus.

 

Zum Seitenanfang

21.7.1    Strikte Fließkommaberechnungen mit strictfp Zur vorigen ÜberschriftZur nächsten Überschrift

Damit zum einen die Vorgaben der IEEE-Norm erfüllt werden und zum anderen die Geschwindigkeit gewährleistet werden kann, lässt sich der Modifizierer strictfp einsetzen – so geht die JVM bei Operationen strikt nach der IEEE-Norm vor. Wir nennen das FP-strikt. Ohne strictfp (wie es also für die meisten unserer Programme der Fall ist) nimmt die JVM eine interne Optimierung vor. Nach außen bleiben die Datentypen 32 Bit und 64 Bit lang, das heißt: Bei den Konstanten in double und float ändert sich nichts. Zwischenergebnisse bei Fließkommaberechnungen werden aber eventuell mit größerer Genauigkeit berechnet.

Der Modifizierer strictfp lässt sich an unterschiedlichen Stellen einsetzen: an Klassen, Schnittstellen oder Methoden, aber nicht an einzelnen Variablen. Ist ein Typ oder eine Methode strictfp, dann ist alles innerhalb des Typs oder der Methode FP-strikt.

 

Zum Seitenanfang

21.7.2    Die Klassen Math und StrictMath Zur vorigen ÜberschriftZur nächsten Überschrift

Für strikte mathematische Operationen gibt es eine eigene Klasse: StrictMath. An der Klassendeklaration für StrictMath lässt sich ablesen, dass sich alle Methoden an die IEEE-Norm halten.

Listing 21.15    java.lang.StrictMath.java, StrictMath

public final strictfp class StrictMath {

// ...

}

Allerdings gibt es nicht zwei Implementierungen der mathematischen Methoden – einmal strikt und genau bzw. einmal nicht strikt, dafür potenziell schneller. Bisher delegiert die Implementierung für Math direkt an StrictMath:

Listing 21.16    java.lang.Math.java, Ausschnitt

public final strictfp class Math {

...

public static double tan( double a ) {

return StrictMath.tan( a );

// default impl. delegates to StrictMath

}

...

}

Die Konsequenz ist, dass alle Methoden wie Math.pow(double, double) strikt nach IEEE-Norm rechnen. Das ist zwar aus Sicht der Präzision und Übertragbarkeit der Ergebnisse wünschenswert, aber die Performance ist nicht optimal.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java ist auch eine Insel Java ist auch eine Insel

Jetzt Buch bestellen


 Buchempfehlungen
Zum Rheinwerk-Shop: Captain CiaoCiao erobert Java

Captain CiaoCiao erobert Java




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Objektorientierte Programmierung

Objektorientierte Programmierung




 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2021

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.

Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de



Cookie-Einstellungen ändern