1

strictfpは浮動小数点計算をIEEE-754標準に制限することを常に読んできましたが、この標準に従って計算結果を制限する必要が生じた理由を読んだことはありませんか?

4

1 に答える 1

1

James Gosling と彼のチームによって Java が開発されていたとき、プラットフォームの独立性が優先事項でした。彼らは、異なるオペレーティング システムを実行している場合でも、異なる命令セットを持つどのマシンでもまったく同じように動作するように、オーク (Java) を非常に優れたものにしたいと考えていました。しかし、それらは浮動小数点演算の問題でした。つまり、float値またはdouble値の計算に関しては、演算結果は精度のためにマシン (32/64 ビット プロセッサ アーキテクチャ) によって異なりました。当時の pentium プロセッサのように効率 (高速計算) を目標として構築されたプロセッサもあれば、当時の古いプロセッサのように精度 (正確な結果) を目標として構築されたプロセッサもありました。

高速計算に苦労しているプロセッサは精度値を切り上げましたが、他のプロセッサはそうではなかったため、結果はわずかに異なりました。そして、この違いはWORAの Java スローガンに反するものでした。したがって、Java の人々は、浮動小数点演算の結果をIEEE-754標準に制限する修飾子strictfpを使用しました。

Strictfp を使用すると、すべてのプラットフォームで浮動小数点計算からまったく同じ結果が得られます。strictfp を使用しない場合、JVM 実装は、利用可能な追加の精度を自由に使用できます。つまり、 strictfpを指定しない場合、JVMおよびJITコンパイラーは浮動小数点計算を必要に応じて計算するライセンスを持っているということです。速度のために、彼らはおそらく計算を私たちのプロセッサに委譲します。しかし、strictfp を onにすると、計算は IEEE 754 算術標準に準拠する必要があります。実際には、これはおそらく JVM が計算を行い、どのマシンでも浮動小数点演算で同じ結果を得ることができることを意味します。

于 2016-12-09T10:13:08.653 に答える