爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 27883|回复: 31

[经验总结] 解决Fortran运算出现-NaN

[复制链接]

新浪微博达人勋

发表于 2014-6-15 19:11:42 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 /xin村儿/ 于 2014-6-15 21:43 编辑

今天运算遇到了NaN, 以为程序出错,各种修改无果,找到了ta,特分享如下:

#fortran学习笔记主页 http://hi.baidu.com/tag/fortran%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/feeds

有做编辑调整
NaN: not a number
这个东西还是超级有用的。
比如现在,我有在一个格点数据,只需要计算其中一部分区域的数值,如果计算值为not a number”的地方,Fortran就直接将计算结果赋值为NaN,这样后续程序调用它就老是出错,该怎么办呢?
——用 ISNAN 函数判断。 isnan(x)是判断x是否是NaN类函数,返回ture、false。
举例:设x是原始数据,t是结果数据
if ( isnan(x) ) then
x=-999  !判断出x为NaN,那么将x赋值为缺测值-999
else
进行计算
end if
顺便说,Hadisst1的海温资料在剔除陆地上的缺测值后,求距平时没问题,但有少数格点在标准化时会变成NaN.
======================缺测的补充分割线============================
本方法来自小强。(他还真是叮当猫啊。。。)

undef=...
do i=1,N
if(x(i)...) then
  ...=-999 !!!undef
end if
end do
把符合条件的值设置为缺测。
缺测! undef!
==================来自梅梅姐的补充分割线===============================
每一步计算都要把陆地剔除掉不算,最后陆地上的值还是undefine的值

梅梅姐的程序里是这样写的:
do !各种do循环


   if(ght(i,j,k).eq.-999.0) then
   ghtm(i,j)=-999.0 !是把陆地值设为-999.0
   else
    做需要的计算
   endif
enddo
====================总结分割线==========================================
其实都一样的嘛,if判断。
只是,千万要注意陆地值的设置~!

评分

参与人数 1金钱 +15 贡献 +3 收起 理由
言深深 + 15 + 3

查看全部评分

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-15 19:49:52 | 显示全部楼层
此处应该有掌声!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-6-15 20:41:04 | 显示全部楼层
总结的挺好。一般我在处理这种情况的时候,预处理里面先行判断,去掉不合适的数据,以保证不会出现nan的情况。因为出现nan,就再不能参与运算,因此通过先行判断,限制nan情况出现时比较合适的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-6-15 21:32:27 | 显示全部楼层
言深深 发表于 2014-6-15 20:41
总结的挺好。一般我在处理这种情况的时候,预处理里面先行判断,去掉不合适的数据,以保证不会出现nan的情 ...

我以前也是先剔除不合理数据,一直没遇到过NaN, 这次遇到是因为有些格点求距平没错,在标准化时就出现NaN。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-16 00:57:33 | 显示全部楼层
必须支持。。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 成长值: 0
发表于 2014-6-16 09:20:25 | 显示全部楼层
/xin村儿/ 发表于 2014-6-15 21:32
我以前也是先剔除不合理数据,一直没遇到过NaN, 这次遇到是因为有些格点求距平没错,在标准化时就出现NaN ...

这个问题往往出现在分母为零,或者出现了很大的书,定义的单精度或者双精度存不下的时候也容易出现。
当然,你总结了一下挺好的啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-16 09:40:57 | 显示全部楼层
我也遇到过这种情况,赞一个
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-16 10:47:33 | 显示全部楼层
给力啊  最近刚出现这种情况
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-6-16 15:43:57 | 显示全部楼层
言深深 发表于 2014-6-16 09:20
这个问题往往出现在分母为零,或者出现了很大的书,定义的单精度或者双精度存不下的时候也容易出现。
当 ...

我加了if分母接近0,还是出现Nan,把数字输出来看,就零星几个点,不知道什么原因,然后才按照本帖解决的。照您说的,有可能是分母很大,但是分母是海温的标准差,有不太可能很大!!奇怪啊!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-16 20:33:24 | 显示全部楼层
经常遇到NaN的情况啊~终于知道怎么做了~~~~~谢谢楼主啊~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表