Re: [問題] NaN 問題
※ 引述《odinkay (新手上路)》之銘言:
: 程式在執行的時候有時候, 某個數會出現 "NaN"的訊息, 但是出現這訊息時
: 表示這次的執行失敗了, 所以會想在程式中間加一個類似於 if else 的部份,
: 讓它中途發現就 goto 回去重跑, 但是當 某數為 NaN 時就不是一個數了,
: 要如何讓它判斷呢 ?
: 例如我試了一下:
: 假如 a 是 real, 但 a 最後的訊息是 NaN
: 於是我想: if (a>-1 .and. a<1) then
: goto 100 (100 表示後面繼續執行的某行代號)
: else
: goto 10 (10 表示可以重新生成 a 的行代號)
: end
: 想法是: 反正 a是 NaN, 那麼範圍一定不在 - 1到 1 之間, 所以
: 一定會 goto 10 重新得到 a. 測試結果是程式看不懂
: , 當 a 出現 NaN 時, 不會 goto 100 和 goto 10, 直接
: 出現了錯誤訊息.
謝謝.
發現如何解決了, isnan(A) 是一個邏輯變數, 會 return 一個 True 或者
False, 用來判斷 A 是否為 NaN, 其中 A 是可能產生 nan 的數, 來看這個例子:
program main
implicit none
real(kind=8) :: A,B,C
A=0.
B=0.
C=A/B
if ( isnan(C) ) then
write(*,*) C
write(*,*) "The value of C is NaN ! "
end if
end
由於 C=0./0. , 所以 C會是一個產生 NaN 的數, 所以 isnan(C) 為 True
, 此時會執行 if 裡面的指令, 螢幕上會秀 C 值(NaN) 與 &
"The value of C is NaN ! " 這段訊息.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.32.101
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章