Was bedeutet der Modifikator strictfp
?
Bei arithmetischen Gleitkommaberechnungen hat die Genauigkeit
durch die verwendeten Datentypen und die Möglichkeiten der
Hardware ihre Grenzen. Java richtet sich hierbei nach dem
für solche Berechnungen vorgesehenen Standard IEEE 754 und
kennt mit dem Datentyp float
die einfache 32 bit
Genauigkeit und mit double
die doppelte 64 bit
Genauigkeit. Werden nun z.B. mehrere Berechnungen aufeinander
folgend durchgeführt, so müssten bei diesem System
eigentlich die Zwischenergebnisse jedes Mal auf die
Größe des jeweiligen Datentyps gerundet werden. Dies
führt zu Ungenauigkeiten. Zwischenergebnisse solcher
Berechnungen sollten also möglichst mit höherer
Genauigkeit erfolgen, um z.B. diese Rundungsfehler zu
minimieren. Deshalb sind z.B. x86 und x86-64 Plattformen in der
Lage, für Zwischenergebnisse mit bis zu 80 bit Genauigkeit
zu rechnen, auch wenn nach außen hin die 32 bit und 64 bit
Genauigkeiten sichtbar bleiben. Im ungünstigsten Fall
können hierdurch auf verschiedenen Plattformen somit jedoch
unterschiedliche Rechenergebnisse resultieren.
Die Verwendung von strictfp
bewirkt nun, dass
Zwischenergebnisse arithmetischer Berechnungen streng nach IEEE
754 gerundet werden, sodass plattformbedingte Differenzen
ausgeschlossen werden können.
Das Schlüsselwort kann verwendet werden für:
- Klassen
- Interfaces
- nicht abstrakte Methoden
Wird ein Block (Klasse, Interface oder Methode) strictfp
deklariert, so sind dessen interne Elemente implizit ebenfalls strictfp
.
Das Schlüsselwort kann nicht verwendet werden für:
- Konstruktoren
- Interface-Methoden
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.