主题:运行时出错了,不知原因,求大神解释
wandaoge0712
[专家分:0] 发布于 2011-08-28 22:53:00
function f(x)result(n)
if(x>-14.178.and.x<=18.757)then
n=1
elseif(x>-56.100.and.x<=-55.400.or.x>-51.700.and.x<=-51.100&
.or. x>-38.100.and.x<=-32.600.or.x>-32.000.and.x<=-30.200&
.or. x>-15.500.and.x<=-12.300)then
n=0
else
n=-1
endif
end
program gz2
real x,a
x=-59.243
print*, x
do while (x<18.757)
a=x
i=f(x)
select case(i)
case(1)
x=x+1.99
case(0)
x=x+1.44
case(-1)
x=x+2.86
end select
print*,x,x-a
end do
end
回复列表 (共11个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-08-30 07:33:00
把错误提示贴上,或是调试一下。
板凳
wandaoge0712 [专家分:0] 发布于 2011-08-30 22:20:00
program gz2
real x,y
x=-59.243
print*, x,x+0.01
do while (x<18.757)
y=0
do while(y<9)
x=x+0.01
if(x>14.178.and.x<=18.757)then
v=0.045216
elseif(x>-56.100.and.x<=-55.400.or.x>-51.700.and.x<=-51.100&
.or. x>-38.100.and.x<=-32.600.or.x>-32.000.and.x<=-30.200&
.or. x>-15.500.and.x<=-12.300)then
v=0.062547
else
v=0.0314
endif
y=y+v
end do
print*, x,y
end do
end
编译,运行都没错
只是结果令我蛋疼
x每次都只有加0.01
按理小数点第3位及之后都不会变
但x小数点后变得千奇百怪
让我都怀疑是不是Fortran安装出错了
想了一周没想通
3 楼
cgl_lgs [专家分:21040] 发布于 2011-08-31 09:29:00
real x,y
改为:
real(8) x,y
另:你别指望计算机能精确表示所有的小数。毕竟它的有效数位有限,且存储在计算机中是以二进制存储的:)
4 楼
wandaoge0712 [专家分:0] 发布于 2011-08-31 11:05:00
为什么有时很精确,有时候不行呢
5 楼
cgl_lgs [专家分:21040] 发布于 2011-08-31 12:01:00
因为有的数用2进制表示是可以精确表示的,但有些十进制的有限小数用二进制时却变成了循环小数:)
6 楼
wandaoge0712 [专家分:0] 发布于 2011-09-01 04:33:00
谢谢,这个问题我明白了,还有一个疑惑,希望解答
program do_while
real x,y
do while(y<=10)
y=y+0.01
x=x+0.01
print*,x,y
enddo
end
运行后输出应该x,y应该从0.01到10,可为什们Fortran运行输出是从7.多到10
7 楼
wandaoge0712 [专家分:0] 发布于 2011-09-01 04:46:00
还有,这个论坛怎么不能传电脑上的图片啊
8 楼
cgl_lgs [专家分:21040] 发布于 2011-09-01 11:44:00
[quote]谢谢,这个问题我明白了,还有一个疑惑,希望解答
program do_while
real x,y
do while(y<=10)
y=y+0.01
x=x+0.01
print*,x,y
enddo
end
运行后输出应该x,y应该从0.01到10,可为什们Fortran运行输出是从7.多到10
[/quote]
x和y没有初始化,初值不确定。
9 楼
cgl_lgs [专家分:21040] 发布于 2011-09-01 11:46:00
[quote]还有,这个论坛怎么不能传电脑上的图片啊[/quote]一楼可以传。
10 楼
wandaoge0712 [专家分:0] 发布于 2011-09-01 12:45:00
不赋予初值,不是默认为0吗?
而且赋了初值为0后
运行结果还一样从7到10
我来回复