2010-03-24 79 views

回答

11

基本上,它規定涉及受影響的floatdouble變量的計算必須遵循IEEE 754規範的要求,包括中間結果。

這樣做的效果:

  • 確保相同的輸入,則始終會在所有系統上
  • 的CPU可能必須做一些額外的工作完全相同的結果,使得它稍微慢
  • 結果將是,在某些情況下,準確的(要少得多,在極端情況下)

編輯: 更具體地說,許多現代CPU在內部使用80位浮點運算("extended precision")。因此,它們可以在內部以非規格化形式表示一些數字,這些數字會導致32位或64位浮點數的算術溢出或下溢(分別產生無窮大或零);在邊緣情況下,80位只允許保留更高的精度。當這些數字出現在計算中的中間結果中,但最終結果在可以用32/64位浮點數表示的數字範圍內時,那麼在使用80位浮點算法的機器上的結果比在機器上得到「更正確」不要 - 或者在使用strictfp的代碼中。

+0

謝謝邁克爾。在什麼情況下浮點計算可能與IEEE754規範不同? – 2010-03-24 09:34:52

6

我喜歡這個答案,這傷害到了這​​一點:

它可以確保你的計算是在所有平臺上同樣是錯誤的。

+0

哪個答案??? – bluish 2012-11-22 12:48:07

2

strictfp是一個關鍵字,並且可以被用來修改一個類或方法,但從來沒有一個 變量。將類標記爲strictfp意味着該類中的任何方法代碼將符合IEEE 754浮點標準規則。如果沒有該修飾符,則方法中使用的浮點可能會以依賴於平臺的方式運行。
如果您沒有將類聲明爲strictfp,那麼通過將方法聲明爲strictfp,您仍然可以在逐個方法的基礎上獲得strictfp行爲。

如果您不知道IEEE 754標準,現在不是學習它的時間。正如我們所說,你有更大的魚來炒。