タイトルのように... クラス X が strictfp と宣言され、クラス Y のメソッドを呼び出す場合、厳密性が強制されますか、それとも X 自身のコードにのみ適用されますか?
さらに、strictfp クラス メソッドで値を計算し、それを非 strictfp メソッドに渡す場合、それ以上の計算が行われなければ、その値はまだ「安全」ですか?
私が理解しstrictfp
ている限り、このキーワードでマークされた範囲に限定されています。これは、マークされたクラスまたはメソッドの計算が移植可能になることを意味します。
参照されたコードに影響を伝播することはできません。たとえば、foo()
is であるが ではない他のクラスからstrictfp
呼び出す場合、内部の計算は移植できませんが、内部の計算は移植できます。そのため、の結果が全体的な結果で使用される場合、移植性がない可能性があります。bar()
strictfp
bar()
foo()
bar()
foo()
public strictfp double foo() {
return bar() * 3.1415926;
}
public double bar() {
return 2.718281828 * 2.0;
}
この結果2.718281828 * 2.0
は移植可能ではありませんが、その乗算は移植可能3.1415926
です。