W Javie ścisłefp to modyfikator oznaczający ścisłą liczbę zmiennoprzecinkową, który nie został wprowadzony w podstawowej wersji Javy, tak jak został wprowadzony w Javie w wersji 1.2. Jest używany w Javie w celu ograniczenia obliczeń zmiennoprzecinkowych i zapewnienia tego samego wyniku na każdej platformie podczas wykonywania operacji na zmiennej zmiennoprzecinkowej.
Obliczenia zmiennoprzecinkowe zależą od platformy, tj. różne wyniki (wartości zmiennoprzecinkowe) są osiągane, gdy plik klasy jest uruchamiany na różnych platformach (procesory 16/32/64-bitowe). Aby rozwiązać tego typu problem, w wersji JDK 1.2 wprowadzono słowo kluczowe strictfp w następujący sposób IEEE754 standardy obliczeń zmiennoprzecinkowych.
Notatka: Modyfikator strictfp jest używany tylko z interfejsami i metodami klas, ale nie ma zastosowania do zmiennych, jak pokazano poniżej:
Ilustracja 1: Użycie słów kluczowych w klasach
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
Ilustracja 2: Użycie słów kluczowych w interfejsach
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
Ilustracja 3: Użycie słowa kluczowego metodą abstrakcyjną w interfejsie
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
Z powyższych ilustracji można wyciągnąć następujące wnioski:
- Kiedy klasa lub interfejs są zadeklarowane z modyfikatorem strictfp, wówczas wszystkie metody zadeklarowane w klasie/interfejsie i wszystkie typy zagnieżdżone zadeklarowane w klasie są domyślnie strictfp.
- ścisłefp nie mogę stosować metody abstrakcyjne. Można go jednak używać z klasami/interfejsami abstrakcyjnymi.
- Ponieważ metody interfejsu są w sposób dorozumiany abstrakcyjne, strictfp nie może być używane z żadną metodą wewnątrz interfejsu.
- Od wersji Java 17 słowo kluczowe strictfp NIE jest wymagane jawnie, ponieważ wszystkie wyrażenia zmiennoprzecinkowe są ściśle oceniane.
Przykład:
Java// Java program to illustrate strictfp modifier // Usage in Classes // Main class class GFG { // Method 1 // Calculating sum using strictfp modifier public strictfp double sum() { double num1 = 10e+10; double num2 = 6e+08; // Returning the sum return (num1 + num2); } // Method 2 // Main driver method public static void main(String[] args) { // Creating object of class in main() method GFG t = new GFG(); // Here we have error of putting strictfp and // error is not found public static void main method System.out.println(t.sum()); } }
Wyjście
1.006E11
Wyjście:
Poniżej możemy zobaczyć wynik w konsoli.