向着光亮 发表于 2018-1-22 20:13:18

Fortran计算结果浮点数异常

如图。按照文献里的公式计算天文日照,只是纬度值稍微变了一点就计算有误,我把正确的和错误的计算的放上面了,不知道怎么回事,改了定义real*8:: delta(365),y(365),ws(365),sl(365)为单双精度都试了,结果还是Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG,然后把纬度改为41.25它又有结果了,实在不知为何,忘有人指导!先行谢过

pasuka 发表于 2018-1-22 22:16:42

本帖最后由 pasuka 于 2018-1-22 22:18 编辑

请将公式的系数,譬如1.00011表示成单精度1.00011E0,双精度1.00011D0,180改成单精度1.8E2,双精度1.8D2
年角代码中的(n-1)改写成real(n-1)

vvt 发表于 2018-1-23 09:42:30

代码复制粘贴更好,不要截图

向着光亮 发表于 2018-1-23 09:44:36

vvt 发表于 2018-1-23 09:42
代码复制粘贴更好,不要截图

为什么呢,这样也能看清楚啊

向着光亮 发表于 2018-1-23 09:56:54

pasuka 发表于 2018-1-22 22:16
请将公式的系数,譬如1.00011表示成单精度1.00011E0,双精度1.00011D0,180改成单精度1.8E2,双精度1.8D2
...

你好,按照你的方法改了之后可以计算,但是结果是空的,这是怎么回事

vvt 发表于 2018-1-23 10:08:58

向着光亮 发表于 2018-1-23 09:44
为什么呢,这样也能看清楚啊

因为截图不能复制粘贴。别人懒得给你测试。
反正我没耐心照着敲一遍你的代码。

向着光亮 发表于 2018-1-23 10:12:30

vvt 发表于 2018-1-23 10:08
因为截图不能复制粘贴。别人懒得给你测试。
反正我没耐心照着敲一遍你的代码。 ...
号的,我复制给你
program ex0109
real*8:: delta(366),y(366),ws(366),sl(366)
integer n
real*8,parameter::pi=3.1415926
real*8 lat
lat=42.4025

do n=1,366
   y(n)=2.0*pi*real(n-1)/366.0!年角

!delta(n)=0.006918-0.399912*cos(y(n))+0.070257*sin(y(n))-0.006758*cos(2*y(n))&
!+0.000907*sin(2*y(n))-0.002697*cos(3*y(n))+0.00148*sin(3*y(n))!太阳赤纬
delta(n)=6.918E-3-3.99912E-1*cos(y(n))+7.0257E-2*sin(y(n))-6.758E-3*cos(2*y(n))&
+9.07E-4*sin(2*y(n))-2.697E-3*cos(3*y(n))+1.48E-3*sin(3*y(n))

ws(n)=acos(-tan(lat)*tan(delta(n)))!时角(角度)
sl(n)=(1.8E2/pi)*ws(n)*(2.0E0/1.5E1)!日长
!write(*,fmt="(365f8.2)")delta(n)
open(unit=7,file="D:\Fortran读写文件\计算云量\tiwen\2012tianwen")
write(*,*)sl(n)
end do

stop
end

vvt 发表于 2018-1-23 10:40:15

lat=42.4025*PI/180.0
纬度应该是弧度,而非角度。

pasuka 发表于 2018-1-23 11:21:38

向着光亮 发表于 2018-1-23 10:12
号的,我复制给你
program ex0109
real*8:: delta(366),y(366),ws(366),sl(366 ...

依旧是问题代码:
1、明明打开同一个文件,open语句为何放在do循环内?
2、有open无close;
3、为啥不能举一反三把3*y(n)这类表述也改成3.0E0*y(n)?
师傅领进门,修行在自身

向着光亮 发表于 2018-1-23 11:22:04

vvt 发表于 2018-1-23 10:40
lat=42.4025*PI/180.0
纬度应该是弧度,而非角度。

好像有道理,但是我图片中放的应该是计算的角度啊,你看看ws(n)=acos(-tan(lat)*tan(delta(n)))!时角
页: [1] 2
查看完整版本: Fortran计算结果浮点数异常