Was bedeutet der Modifikator strictfp?

Die Genauigkeit von Gleitkommaberechnungen eines Computers ist abhängig von der verwendeten Hardware. Der Modifikator sorgt für eine einheitliche Berechnung auf allen Architekturen.

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:

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: