Fortran Coder

查看: 14938|回复: 6
打印 上一主题 下一主题

[数值问题] fortran浮点数异常

[复制链接]

50

帖子

11

主题

0

精华

熟手

F 币
239 元
贡献
151 点
跳转到指定楼层
楼主
发表于 2018-5-16 20:45:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
编写了一个代码,通过光合有效辐射求日照时数,如图,但是总是显示NAN揭示浮点数异常,自己通过调试发现日落时角以后都是NaN,可是实在不知道原因,我把代码和工式发上来,希望大神指导!跪谢!
[Fortran] 纯文本查看 复制代码
program main
implicit none
real G, lat
real a,b
integer n
real,parameter::pi=3.1415926
real::ws(365),dr(365),angle(365),rizhao(365),q(365),qq(365),tianwen(365)
a=0.18
b=0.55
G=0.0820*24.0*60.0
lat=42.53*(pi/180.0)

open(10,file="D:\1998PAR.txt")
open(11,file="D:\1998.txt")
do n=1,365
    read(10,*)q(n)
    read(11,*)tianwen(n)
    q(n)=q(n)/0.5*0.0864
angle(n)=0.409*sin((2*pi/365.0)*n-1.39)
dr(n)=1+0.033*cos((2*pi/365.0)*n)
ws(n)=acos(-tan(lat)*tan(dr(n)))

qq(n)=24.0*(60.0/pi)*G*dr(n)*(ws(n)*sin(lat)*sin(dr(n))+cos(lat)*cos(dr(n))*sin(ws(n)))
rizhao(n)=(q(n)/qq(n)-a)/b*tianwen(n)
end do 
write(*,"(f8.2)")rizhao

stop
end 


22.png (255.23 KB, 下载次数: 364)

22.png

33.png (24.23 KB, 下载次数: 367)

33.png

44.png (58.48 KB, 下载次数: 389)

44.png

1998.txt

3.56 KB, 下载次数: 3

1998PAR.txt

2.77 KB, 下载次数: 1

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2018-5-17 09:09:36 | 只看该作者
注意第 21 行
ws(n)=acos(-tan(lat)*tan(dr(n)))
此处的 acos 很可能不在定义域 [-1,1] 之间,这里你确认一下。

50

帖子

11

主题

0

精华

熟手

F 币
239 元
贡献
151 点
板凳
 楼主| 发表于 2018-5-17 15:52:17 | 只看该作者
什么意思啊,它在定义域,我实在找不到问题,您能帮忙看看不,文本我也上传了,

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2018-5-18 07:48:41 | 只看该作者
ws(n)=acos(-tan(lat)*tan(dr(n)))
也就是
-tan(lat)*tan(dr(n)) 不在 [-1,1] 范围内

50

帖子

11

主题

0

精华

熟手

F 币
239 元
贡献
151 点
5#
 楼主| 发表于 2018-5-25 08:34:38 | 只看该作者
fcode 发表于 2018-5-18 07:48
ws(n)=acos(-tan(lat)*tan(dr(n)))
也就是
-tan(lat)*tan(dr(n)) 不在 [-1,1] 范围内

好像不在,但是算出来确定是这样,您能帮忙看看吗

50

帖子

11

主题

0

精华

熟手

F 币
239 元
贡献
151 点
6#
 楼主| 发表于 2018-5-25 11:15:56 | 只看该作者
fcode 发表于 2018-5-18 07:48
ws(n)=acos(-tan(lat)*tan(dr(n)))
也就是
-tan(lat)*tan(dr(n)) 不在 [-1,1] 范围内

是超过了定义域的范围,但是它算出来就是这样

260

帖子

0

主题

0

精华

版主

World Analyser

F 币
721 元
贡献
512 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
7#
发表于 2018-5-31 08:20:17 | 只看该作者
如果你确信超过了定义域,并且代码逻辑是符合算法逻辑的,那么你应该质疑算法的正确性。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-22 23:46

Powered by Tencent X3.4

© 2013-2024 Tencent

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