2017-09-05 77 views
2

有沒有一種方法可以以不同的方式將NaN與普通數字結合起來,然後通常在Fortran中完成?在Fortran中忽略NaN項總和

我有幾個總結,其中包含'安全'條款,它不能是NaN,以及其他一些條款可以是NaN。 我想對錶達式的評估忽略加數,如果它們是NaN

我不能只是擺脫他們乘以一個空因子時,他們是NaN因爲NaN x 0無論如何給NaN。 想法?

感謝

回答

4

有不傳播NaN沒有算術運算。所以像乘以0這樣的想法是行不通的。

你唯一的解決辦法是錯過NaN這個總和。做到這一點的東西。如果你不使用IEEE754或使用FORTRAN的舊標準上

IF (IEEE_IS_NAN(x)) 

爲主,那麼你可以使用

IF(x .NE. x)

這將是當且僅當x是NaN。

+1

isnan不是一個標準的Fortran內在。最好使用ieee_is_nan,請參閱https://software.intel.com/zh-cn/node/692942 –

+1

此外,某些編譯器選項將優化掉x .ne。 x',所以要小心。始終測試每個系統的NaN探測器。 – Ross

+0

@IanBush:確實;現在我還沒有使用過FORTRAN,但在深遠的過去,我確實使用了IF(x .NE。x)'。 – Bathsheba