2016-02-25 620 views
0

我目前在Fortran中運行一個計算模型。在計算過程中,有時我得到了「NaN」,「Infinity」和大於雙精度的數字(顯示爲**************)。我需要檢測它們。我可以用下面的命令檢測「NaN」。在Fortran中處理NaN,Infinity和大於雙精度的數字?

if(isnan(result))then 
    continue = .false. 
else 
    continue = .true. 
endif 

我不知道如何檢測「Infinity」和「************」(數字大於雙精度)。

我該怎麼做?

+1

星號並不意味着數字「大於雙精度」,而是它們在打印時溢出格式說明符。這可以例如如果僅使用一個字符打印一個兩位數的整數,則會發生。 –

+0

你有一個支持'ieee_ *'內部模塊的編譯器嗎? – francescalus

+1

[有沒有一種標準的方法來檢查Fortran 90/95中的Infinite和NaN?](http://stackoverflow.com/questions/17389958/is-there-a-standard-way-to-check- for-infinite-and-nan-in-fortran-90-95) –

回答

0

現在,我用下面的命令解決了星號(儘管它可能不那麼高效)。感謝Alexander Vogt。

if(isnan(result))then 
    continue = .false. 
    elseif(result.gt.1.d20)then 
    continue = .false. 
    else 
    continue = .true. 
    endif 

但是,我仍然無法解決「無限」。我嘗試過「IEEE」,但我的編譯器不支持。

謝謝

+1

你不能只檢查'result> huge(result)'嗎? –

+0

爲健壯性,你應該趕上 - 無限。 'abs(x)<= huge(x)'能夠捕獲所有三個'+/- inf'和'NAN'(我應該說我不知道​​這是否保證每個標準都有效) – agentp