I Java strengfp er en modifikator som står for strict floating-point som ikke ble introdusert i basisversjonen av Java slik den ble introdusert i Java versjon 1.2. Den brukes i Java for å begrense flytepunktberegninger og sikre samme resultat på hver plattform mens du utfører operasjoner i flyttallvariabelen.
Flytpunktsberegninger er plattformavhengige, dvs. forskjellig utgang (flytpunktverdier) oppnås når en klassefil kjøres på forskjellige plattformer (16/32/64-bits prosessorer). For å løse denne typen problemer ble strictfp-nøkkelordet introdusert i JDK 1.2-versjonen ved å følge IEEE 754 standarder for flyttallsberegninger.
Note: strictfp-modifikator brukes kun med klassegrensesnitt og metoder, men kan ikke brukes med variabler som illustrert nedenfor:
Illustrasjon 1: Søkeordbruk med klasser
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
Illustrasjon 2: Søkeordbruk med grensesnitt
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
Illustrasjon 3: Søkeordbruk med abstrakt metode i et grensesnitt
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
Noen konklusjoner kan trekkes fra illustrasjonene ovenfor som følger:
- Når en klasse eller et grensesnitt er deklarert med strictfp-modifikator, er alle metoder som er deklarert i klassen/grensesnittet og alle nestede typer som er erklært i klassen, implisitt strictfp.
- strengfp kan ikke brukes med abstrakte metoder. Den kan imidlertid brukes med abstrakte klasser/grensesnitt.
- Siden metoder for et grensesnitt er implisitt abstrakte, kan strictfp ikke brukes med noen metode inne i et grensesnitt.
- Fra Java 17 versjon er strictfp nøkkelord IKKE påkrevd eksplisitt da alle flyttallsuttrykk er strengt evaluert.
Eksempel:
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()); } }
Produksjon
1.006E11
Produksjon:
Nedenfor kan vi se utgangen i konsollen.