作者odinkay (新手上路)
看板Fortran
标题Re: [问题] NaN 问题
时间Sun Apr 26 00:56:11 2009
※ 引述《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