2016-12-09 6 views
0

私はいつもstrictfpを読んで浮動小数点計算をIEEE-754標準に制限していますが、なぜこの標準に従って計算の結果を制限する必要があるのか​​読んでいないのですか?strictfpが存在するのはなぜですか?

+2

クラス、インターフェイス、メソッド定義で 'strictfp'を使うと、浮動小数点計算がすべてのプラットフォームで同じになるようにします。 – Omoro

+0

'strictfp'は振る舞いを厳密にし、再現性がありポータブルなものにします。いつポータブルFP算術が必要でしょうか?私はこれを必要とする個人的な経験はありませんが、ゲームは1つの可能なユースケースであると聞いています(多くの人が代わりに固定小数点演算を使用しています)。 –

答えて

1

james goslingと彼のチームによって開発されたJavaでは、プラットフォームの独立性が優先されました。彼らは、異なったオペレーティングシステムを実行していても、異なる命令セットを持つマシンで全く同じように動作するように、オーク(Java)を非常に良くしたいと考えました。しかし、浮動小数点演算の問題、すなわち浮動小数点またはdoubleの計算に至ったとき、演算結果は精度によって異なるマシン(32/64ビットプロセッサアーキテクチャ)で異なります。一部のプロセッサは、その時間のペンティアムプロセッサのような効率(高速計算)を目標に構築されていたが、残りはその時代の古いプロセッサのような精度(正確な結果)を対象としていた。

高速演算のためにプロセッサをスタブルリングすると、精度値は切り上げられましたが、他のプロセッサは処理されなかったため、結果はわずかに異なりました。そしてこの違いは、WORAのjavaスローガンに反していました。したがって、Javaの人々はstrictfpという修飾子を使って浮動小数点演算の結果をIEEE-754標準に制限しました。

Strictfpを使用すると、すべてのプラットフォームで浮動小数点計算と同じ結果が得られます。 strictfpを使用しない場合、JVMの実装では、使用可能な場合は余分な精度を自由に使用できます。これは、strictfpを指定しないと、JVMJITコンパイラは、必要なときに私たちの浮動小数点計算を計算するためのライセンスを持っているということです。速度の面では、計算機をプロセッサに委託する可能性が最も高いでしょう。しかしstrictfpとすると、実際にはJVMが計算を行い、どのマシンでも浮動小数点演算で同じ結果が得られることを意味するIEEE 754算術標準に準拠している必要があります。

+1

3分であなた自身の質問に答えるには報酬が必要です:) http://stackoverflow.com/a/31394053/706695 – HRgiger

+0

今質問をして、質問に答える時間との差が10分で3分ではないことを確認しました。 10分でロットを読むことができます。 – Ujjwal

+0

あなたはすでに答えを知っているのですか?おそらくあなたは、このサイトがコンテンツ作成のためではないという点を見逃しているかもしれません。 – HRgiger

関連する問題