2.16.5 | Erweiterte Gleitpunktdarstellungen |
Bis zur Version 1.2 war in der Sprachspezifikation festgelegt, dass Gleitpunktzahlen in der Virtual Machine intern mit der in IEEE 754 definierten Darstellung mit einfacher bzw. doppelter Genauigkeit (32 bzw. 64 Bit) repräsentiert werden müssen.
Darüber hinaus definiert IEEE 754 aber auch noch die so genannten erweiterten Darstellungen, die deutlich länger sind (mindestens 43 bzw. 79 Bit) und auf einigen Plattformen auch von der Hardware unterstützt werden. Auf solchen Plattformen konnte die zusätzliche Genauigkeit aber bisher aufgrund der Spezifikation nicht genutzt werden.
Daher wurde in Java 1.2 eine Spracherweiterung eingeführt, die auch die Verwendung der erweiterten Darstellungen gestattet. Sie sieht vor, dass eine Virtual Machine standardmäßig die erweiterten Gleitpunktdarstellungen verwendet, wenn sie von der Hardware unterstützt werden. Dies bringt im Wesentlichen zwei Vorteile:Um speziell dem zweiten Punkt Rechnung zu tragen, wurde das neue Schlüsselwort strictfp eingeführt. Es wird als optionaler Modifier für Klassen- und Methodendeklarationen verwendet und erzwingt, dass Operationen unter Verwendung der einfachen Darstellungen durchgeführt werden, so wie es seit Java 1.0 der Fall ist. Mit strictfp kann somit gewährleistet werden, dass Gleitpunktrechenoperationen auf allen Plattformen exakt das gleiche Ergebnis liefern.
- Auf Rechnerarchitekturen, die für Gleitpunktoperationen die erweiterten Darstellungen verwenden, resultiert ein Performance-Gewinn, da keine Konvertierungen in die einfachen Darstellungen erforderlich sind.
- Rechenoperationen können mit höherer Genauigkeit durchgeführt werden. Dies impliziert andererseits aber auch, dass dieselbe Rechenoperation auf verschiedenen Java Virtual Machines unterschiedliche Ergebnisse liefern kann, je nachdem, ob die erweiterten Darstellungen von der jeweiligen Virtual Machine unterstützt werden oder nicht.
Die Erweiterung betrifft aber nur die interne Darstellung der Gleitpunkttypen »während« der Durchführung von Rechenoperationen zur Laufzeit. Vom Standpunkt der Sprache aus betrachtet ändern sich die Eigenschaften der Gleitpunkttypen nicht. Der Typ float hat unabhängig von seiner internen Darstellung in der Virtual Machine eine Länge von 32 Bit, bzw. 64 Bit bei double.