2013-06-11 18 views

回答

4

據我瞭解strictfp僅限於標有此關鍵字的範圍。這意味着它會使標記的類或方法的計算變得可移植。

它不能將效果傳播到引用的代碼。例如,如果foo()strictfp,但它從某個非strictfp的其他類調用bar(),則bar()內的計算將不可移植,但foo()內的計算結果將爲。因此,如果foo()中使用bar()的結果,則整體結果可能不可移植。

public strictfp double foo() { 
    return bar() * 3.1415926; 
} 
public double bar() { 
    return 2.718281828 * 2.0; 
} 

這個結果2.718281828 * 2.0不便攜,但是它乘以3.1415926是。

+0

我甚至不知道什麼便攜式手段。 – fungusanthrax

+0

如果您在其他地方運行此代碼 - 無論您使用何種操作系統或哪種處理器等,結果都將始終如一。 – bartektartanus

0

它只適用於在該類中聲明的方法中的表達式。

從jGuru文章What is the strictfp modifier for? When would I consider using it?

strictfp關鍵字可以被施加到兩個類和方法。對於類(和接口),它指定該類的所有方法中的所有表達式都是FP-strict

要回答你的第二個問題:是的,一旦浮動點值不再需要進一步計算,浮點值將是「安全的」,因爲strictfp僅適用於表達式。

相關:When should I use the "strictfp" keyword in java?

2

Java Language Specification

strictfp修飾符的作用是使類聲明(包括內變量初始化,例如初始化器,靜態初始化,並構造函數)之內的所有浮點或雙精度表達式是明確FP-嚴格。

[我的重點]

相關問題