logo

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

出力
1.006E11 

出力: 

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

出力画面' src='//techcodeview.com/img/java/66/strictfp-keyword-in-java.webp' title= 

クイズの作成