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
出力:
以下にコンソールの出力を示します。