Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5 (Tiger-Release)
Buch: Java ist auch eine Insel
gp Kapitel 5 Mathematisches
  gp 5.1 Arithmetik in Java
    gp 5.1.1 Java-Sondertypen im Beispiel
    gp 5.1.2 Soll eine Division durch Null zur Übersetzungszeit erkannt werden?
  gp 5.2 Die Funktionen der Math-Klasse
    gp 5.2.1 Attribute
    gp 5.2.2 Winkelfunktionen (trigonometrische Funktionen und Arcus–Funktionen)
    gp 5.2.3 Runden von Werten
    gp 5.2.4 Wurzel und Exponentialfunktionen
    gp 5.2.5 Der Logarithmus
    gp 5.2.6 Rest der ganzzahligen Division
    gp 5.2.7 Absolutwerte und Maximum, Minimum
    gp 5.2.8 Zufallszahlen
  gp 5.3 Mathe bitte strikt
    gp 5.3.1 Strikt Fließkomma mit strictfp
    gp 5.3.2 Die Klassen Math und StrictMath
  gp 5.4 Die Random-Klasse
  gp 5.5 Große Zahlen
    gp 5.5.1 Die Klasse BigInteger
    gp 5.5.2 Funktionen von BigInteger
    gp 5.5.3 Ganz lange Fakultäten
    gp 5.5.4 BigDecimal
  gp 5.6 Rechnen mit Einheiten: Java Units Specification


Galileo Computing

5.3 Mathe bitte strikdowntop

Bei der Berechnung mit Fließkommazahlen schreibt die Definition des IEEE-754-Standard vor, wie numerische Berechnungen durchgeführt werden. Damit soll die CPU für float und double mit 32 beziehungsweise 64 Bit rechnen. In Wirklichkeit rechnet jedoch so gut wie kein mathematischer Prozessor mit diesen Größen, außer vielleicht AMD mit ihrer 3Dnow!-Technologie. Auf der PC-Seite kommen Intel und AMD mit internen Rechengenauigkeiten von 80 Bit, also zehn Bytes, zum Zuge. 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:

gp  Diese Genauigkeit kann bisher von Java nicht genutzt werden.
gp  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 können aber die mathematischen Ergebnisse auf unterschiedlichen Maschinen anders aussehen.

Galileo Computing

5.3.1 Strikt Fließkomma mit strictfp  downtop

Damit zum einen die Vorgaben der Norm erfüllt werden und zum anderen die Geschwindigkeit gewährleistet werden kann, lässt sich vor Klassen und Methoden der Modifizierer strictfp setzen, damit Operationen strikt nach der IEEE-Norm vorgehen. Ohne dieses Schlüsselwort (wie es also für unsere meisten Programme der Fall ist) wird eine interne Optimierung vorgenommen. 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 höherer Genauigkeit berechnet.


Galileo Computing

5.3.2 Die Klassen Math und StrictMattoptop

Die Umsetzung der Striktheit in der Math-Klasse wird durch zwei Klassen erreicht: Math und StrictMath. An der Klassendeklaration für StrictMath lässt sich ablesen, dass alle Methoden sich an die IEEE-Norm halten.


public final   strictfp   class StrictMath {
 // ...
}

Die Implementierung ist bisher für Math und StrictMath die gleiche. Alle Methoden mit Berechnungen werden an StrictMath weitergeleitet.


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 Funktionen wie Math.pow() strikt nach IEE-Norm gerechnet werden. Das ist zwar aus Sicht der Präzision und Übertragbarkeit der Ergebnisse wünschenswert, aber die Performanz ist nicht optimal.





Copyright © Galileo Press GmbH 2004
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.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de