Javaのstrictfpキーワード

Javaのstrictfpキーワード

Javaでは、 厳密なFP Java バージョン 1.2 で導入されたため、Java の基本バージョンでは導入されていませんでした、厳密な浮動小数点を表す修飾子です。これは、浮動小数点計算を制限し、浮動小数点変数で演算を実行する際にすべてのプラットフォームで同じ結果を保証するために 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: インターフェイス内の Abstract メソッドでのキーワードの使用

 strictfp interface Test {   
double sum();

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

上記の図から、次のようないくつかの結論を導き出すことができます。

  • クラスまたはインターフェイスが strictfp 修飾子を使用して宣言されている場合、クラス/インターフェイスで宣言されているすべてのメソッドと、クラスで宣言されているすべてのネストされた型は暗黙的に strictfp になります。
  • 厳密なFP できない 抽象メソッドと一緒に使用できます。ただし、抽象クラス/インターフェイスでは使用できます。
  • インターフェイスのメソッドは暗黙的に抽象であるため、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  

出力: 

以下にコンソールの出力を示します。

出力画面  

クイズの作成