2015-12-21 35 views
3

我們有第一次代碼審計即將到來,有人告訴我,不使用strictfp進行浮點運算可能會使我們被標記。軟件在Windows計算機上編碼並部署到Solaris機器以供生產使用。任何關於它的建議是真實的?如果不使用strictfp,代碼在某種程度上會變得不合規?

此外,如果不使用'strictfp`可以使浮點算術代碼不符合或不可移植,爲什麼計算在非strictfp反正呢?

CERT Secure Coding Standards, NUM53-J讓我覺得這是強制使用strictfp

程序需要從浮點運算在不同的JVM和平臺一致的結果必須使用strictfp修飾符。

+1

不要只是鏈接,也引用相關位。我已經猜到了你可能的意思。 –

+0

如果您將它部署到英特爾硬件上的Windows或Solaris上,那麼無論您是否使用strictfp都沒有區別。 (但是如果你有任何機會部署到strictfp確實有所作爲的硬件上,那麼在你的代碼中使用strictfp是一個好主意)查看我的一個老問題的答案:https://stackoverflow.com/問題/ 22562510/does-java-strictfp-modifier-have-any-effect-on-modern-cpus –

+0

當你說「不合規」時 - 不符合什麼? –

回答

6

如果您的應用程序需要浮點運算在不同的JVM之間保持一致,那麼是的,您需要strictfp。如果它不是,那麼不,你沒有。某些應用程序不需要一致性,並且可以從不使用strictfp可提供的計算的中間步驟期間獲得更高精度的潛力中受益。其他人需要爲相同的輸入提供完全相同的輸出,因此需要strictfp才能保證輸出的可移植性。

+0

在我的申請中,一致性(無處不在的最終結果)與產品處理抵押貸款利率和類似的東西很重要。我猜測我們需要strictfp。 –

+6

@Sabir_Khan:如果你正在處理抵押貸款利率和其他財務計算,當然'strictfp'與你的應用無關,因爲它[只適用於double和float](https://docs.oracle.com的.com/JavaSE的/功能/ JLS/SE8/HTML/JLS-8.html#JLS-8.1.1.3)。你沒有使用'double'或'float'進行財務計算,對嗎?如果是這樣,你將有一個更大的審計報告。對於財務來說,通常你需要'BigDecimal'(或者直接實現它的技術,即使用整數值和比例)。 –

相關問題