ключова дума strictfp в java

ключова дума strictfp в java

В Java strictfp е модификатор, който означава стриктна плаваща запетая, която не е въведена в базовата версия на Java, както е въведена в Java версия 1.2. Използва се в Java за ограничаване на изчисленията с плаваща запетая и осигуряване на един и същ резултат на всяка платформа, докато се извършват операции в променливата с плаваща запетая. 
Изчисленията с плаваща запетая зависят от платформата, т.е. различен изход (стойности с плаваща запетая) се постига, когато файл с клас се изпълнява на различни платформи (16/32/64-битови процесори). За да се реши този тип проблем, ключовата дума strictfp беше въведена във версията JDK 1.2, като се следва IEEE 754 стандарти за изчисления с плаваща запетая. 

Забележка: Модификаторът strictfp се използва само с интерфейси и методи на класове, но не е приложим за прилагане с променливи, както е илюстрирано по-долу:

Илюстрация 1: Използване на ключови думи с класове 

 strictfp class Test {   

// All concrete methods here are implicitly strictfp.
}

Илюстрация 2: Използване на ключови думи с интерфейси 

 strictfp interface Test {    
// All methods here becomes implicitly
// strictfp when used during inheritance.
}

class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}

Илюстрация 3: Използване на ключова дума с абстрактен метод в интерфейс

 strictfp interface Test {   
double sum();

// Compile-time error here
strictfp double mul();
}

От горните илюстрации могат да се направят някои заключения, както следва:

  • Когато клас или интерфейс е деклариран с модификатор strictfp, тогава всички методи, декларирани в класа/интерфейса, и всички вложени типове, декларирани в класа, са неявно strictfp.
  • strictfp не може да се използва с абстрактни методи. Въпреки това може да се използва с абстрактни класове/интерфейси.
  • Тъй като методите на интерфейс са имплицитно абстрактни, strictfp не може да се използва с който и да е метод в интерфейс.
  • От версия на Java 17 ключовата дума strictfp НЕ се изисква изрично, тъй като всички изрази с плаваща запетая се оценяват стриктно.

Пример: 

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     =     10  e  +  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  ());      }   }   

Изход
1.006E11  

Изход: 

По-долу можем да видим изхода в конзолата.

Изходен екран  

Създаване на тест