Re: [問題] NaN 問題

看板Fortran作者 (新手上路)時間15年前 (2009/04/26 00:56), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #19yq2iQF (Fortran)
討論串 (同標題文章)
本文引述了以下文章的的內容:
0
2
完整討論串 (本文為第 2 之 2 篇):
0
2
文章代碼(AID): #19yq2iQF (Fortran)