8
A
回答
11
基本上,它規定涉及受影響的float
和double
變量的計算必須遵循IEEE 754規範的要求,包括中間結果。
這樣做的效果:
- 確保相同的輸入,則始終會在所有系統上
- 的CPU可能必須做一些額外的工作完全相同的結果,使得它稍微慢
- 結果將是,在某些情況下,少準確的(要少得多,在極端情況下)
編輯: 更具體地說,許多現代CPU在內部使用80位浮點運算("extended precision")。因此,它們可以在內部以非規格化形式表示一些數字,這些數字會導致32位或64位浮點數的算術溢出或下溢(分別產生無窮大或零);在邊緣情況下,80位只允許保留更高的精度。當這些數字出現在計算中的中間結果中,但最終結果在可以用32/64位浮點數表示的數字範圍內時,那麼在使用80位浮點算法的機器上的結果比在機器上得到「更正確」不要 - 或者在使用strictfp
的代碼中。
+0
謝謝邁克爾。在什麼情況下浮點計算可能與IEEE754規範不同? – 2010-03-24 09:34:52
6
2
strictfp
是一個關鍵字,並且可以被用來修改一個類或方法,但從來沒有一個 變量。將類標記爲strictfp意味着該類中的任何方法代碼將符合IEEE 754浮點標準規則。如果沒有該修飾符,則方法中使用的浮點可能會以依賴於平臺的方式運行。
如果您沒有將類聲明爲strictfp,那麼通過將方法聲明爲strictfp,您仍然可以在逐個方法的基礎上獲得strictfp行爲。
如果您不知道IEEE 754標準,現在不是學習它的時間。正如我們所說,你有更大的魚來炒。
相關問題
- 1. 在java中做什麼?
- 2. java在void中做什麼?
- 3. Collections.unmodifiableSet()在Java中做什麼?
- 4. cipher.update在java中做什麼?
- 5. 什麼是outData.writeInt()在Java中做什麼?
- 6. Java中'0'做什麼?
- 7. java目前在做什麼?
- 8. 「做」在這裏做什麼? (java)
- 9. java -Dnop做什麼?
- 10. 在Perl中做什麼=〜做什麼?
- 11. >>在java中做什麼?
- 12. 在Java方法中做什麼?
- 13. 在Java中File.canExecute()究竟做了什麼?
- 14. j + = j ++在Java中做什麼?
- 15. 在java中嘗試做什麼?
- 16. 在Java中做什麼<>?
- 17. | =運算符在Java中做什麼?
- 18. 在Java中,object.class是做什麼的?
- 19. 我在做這個代碼在Java中做錯了什麼?
- 20. 什麼Socket.getInputStream()。read()方法會在java中做什麼?
- 21. 什麼是synchronized()/ wait()/ notifyAll()在Java中做什麼?
- 22. 這是什麼語法:和代碼在java中做什麼?
- 23. Java類什麼都不做
- 24. Java什麼都不做
- 25. Java - 「(Customer)v.get(i)」做什麼?
- 26. Java中的<>做什麼
- 27. Java中按位異或做什麼?
- 28. java中的數學 - 「%」做什麼?
- 29. Java中的break語句做什麼?
- 30. /*對java中的某行做了什麼?
正如人們可能假設的,相應的Java關鍵字可能是'strictfp'和** not **'fpstrict'。 – 2010-03-24 12:20:55
有效點@Joachim – 2010-03-24 13:42:33