ホームページ  >  記事  >  Java  >  Java の Strictfp

Java の Strictfp

WBOY
WBOYオリジナル
2024-08-30 15:36:00391ブラウズ

Java における strictfp の主な機能は、浮動小数点変数が動作しているときにすべてのプラットフォームで同じ結果を提供することです。昔、James Gosling と彼のチームが Java を開発していたとき、Java 言語の主要な側面の 1 つはプラットフォームの独立性でした。異なるマシン上で同じコードをコンパイル、解釈、実行し、結果が同じであり、プロセッサによって操作されていないことを確認します。

さまざまなプラットフォームで浮動小数点を計算する場合、CPU による浮動小数点を処理するハードウェアの能力により、結果が異なる場合があります。 Strictfp は、すべてのプラットフォームで正確な浮動小数点出力を確実に取得できるようにします。浮動小数点演算の標準である IEEE 754 では、JVM 1.2 バージョンで strictfp が導入されました。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

さまざまな CPU では、標準精度が異なる場合があります。 x86 マシンの場合、32 ビットの精度は 62 ビットなどとは異なります。 strictfp を使用すると、同じコードが異なるプラットフォームで実行されるときに、精度の違いによって出力が操作されないようにすることができ、精度の高いプラットフォームでは正常に動作します。 strictfp は、浮動小数点 Strict を意味する FP Strict として理解してください。

Strictfp の構文

strictfp は単純で、キーワード strictfp で始まります。以下は、クラス、インターフェイス、メソッドの構文です。

1.クラス

strictfp class sample1{
// code here will me implicitly strictfp.
}

2.インターフェース

strictfp interface sample2 {
// methods here will be implicitly strictfp
}

3.メソッド

class India {
strictfp void population()
}

上記のサンプルでは、​​クラスとインターフェイスにキーワード strictfp を追加しただけです。上記の例は、strictfp キーワードを使用する必要がある方法を示しています。次に、strictfp キーワードを使用しない例を以下に示します。

class sample1{
strictfp float a;
}

ここでは、strictfp キーワードを変数に代入しても機能しません。これは厳密にクラスまたはインターフェイスと一緒に渡されるものとします。

Strictfp での実装例

以下は Strictfp での実装例です:

例 #1

次に、コード例で strictfp キーワードを実装して、その動作を示します。  以下は同じプログラムです:

コード:

public class Test  {
public strictfp double add()
{
double number1 = 10e+10;
double number2 = 6e+08;
return (number1+number2);
}
public static strictfp void main(String[] args)
{
Test example = new Test();
System.out.println(example.add());
}
}

出力:

Java の Strictfp

上記のコードの説明: クラス Test 定義から始めて、次に double データ型のメソッドを作成し、それに strictfp キーワードを割り当てました。 add() では、number1 とnumber2 という名前の double データ型の 2 つの変数を作成し、次の行で、メソッドはこれら両方の変数の加算を返します。その後、メイン クラスが作成されます。これにも strictfp が装備されており、内部のコード ブロックは strictfp プロパティを継承します。クラスの新しいオブジェクトを作成すると、最終的に、2 つの変数の加算値を単純に出力する出力 print ステートメントが得られます。

例 #2

次に、同じ strictfp キーワードを異なるプログラムで使用する例を示します。ここでは計算は行いません。代わりに、float 変数に値を渡し、strictfp キーワードを使用して出力します。

コード:

public class new_strictfp {
float f = 9.381f;
strictfp public void displayValue(){
System.out.println(f);
}
public static void main(String[] args) {
new_strictfp Demo = new new_strictfp ();
Demo.displayValue();
}
}

出力:

Java の Strictfp

上記のコードの説明: これは、strictfp キーワードを実装した別の例です。 public クラスから始めて、float データ型と値を持つ新しい変数を作成しました。次に、float 値を出力するメソッドを作成し、メインクラスでクラスのオブジェクトを初期化しました。オブジェクトの後には、以前に作成したメソッドを呼び出す出力ステートメントがあります。ここで、作成されたメソッドは strictfp が有効になっており、割り当てられた浮動小数点値がそのまま出力されることを意味します。

覚えておくべきルール

他のプログラミング言語のキーワードと同様、Java の strictfp にはその用途とルールがあり、意図した結果を達成するには、指定されたルールに従う必要があります。  キーワードを実装する前に、いくつかのルールを理解しましょう。

  • strictfp キーワードはコンストラクターでは実装できません。クラス、インターフェース、メソッドでは問題なく動作します。
  • インターフェイスまたはクラスで strictfp を宣言すると、その内部のすべてのメソッドとネストされた型に対して strictfp が暗黙的に実装されます。
  • strictfp は、抽象クラスまたはインターフェイスで実装できますが、抽象メソッドでは実装できません。
  • コンストラクターと同様に、strictfp を変数と一緒に使用することはできません。前述のサンプル コードを参照してください。

上記のルールに従うことで、strictfp が適切に使用され、浮動小数点精度によって異なる結果が生じる可能性が回避されます。

Java における Strictfp の利点

キーワードによってもたらされる利点を以下に示します。 strictfp を使用する利点は、開発者の観点から見るとさまざまです。いくつかを以下にリストします:

  • さまざまなマシンでの浮動小数点結果の精度。
  • strictfp は、浮動小数点演算の精度と速度を利用します。
  • 32 ビットと 64 ビットに対して完全に公平であり、明らかにより良い結果に重点を置いています。
  • 最後に、このキーワードを使用しても、時間の圧縮率や実行速度が向上することはありません。
  • strictfp キーワードとその関数を使用しない場合、浮動小数点出力は JVM および JIT コンパイラーによってターゲット マシンの CPU 精度ポイントに従って操作できることを理解することが重要です。
  • これは、「Write Once Run Anywhere」という Java プログラミング言語の基本を確実に実行し、ソース マシン以外の場所で異なる結果や誤った結果が得られないようにする、もう 1 つの優れた方法です。

結論 – Java の Strictfp

Java の Strictfp キーワードが何であるかを理解した後、用途を検討し、このキーワードを使用しないようにしました。これは、IEE 754 の浮動小数点標準に従って、JVM 1.2 で導入されました。私たちは、strictfp キーワードを構文で示し、その後、例で実装しました。これは同じ結果を保証する修飾子です。

以上がJava の Strictfpの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。