作者darrenmm (mm)
看板Fortran
标题[问题] 为何这样会爆掉@@@@@@@@@@@@@救命啊!!
时间Fri Mar 14 16:20:42 2014
我的程式码如下:
==============================================
program Q1
implicit none
real,parameter :: n=30
real(kind=8) :: a(n)
integer i
real :: AA=0.0
do i=1,n
a(i)=AA*3**i-0.4*(1/2)**i-0.1*i-0.05
write(*,*) a(i)
end do
stop
end
===============================================
这是一个计算数列的小程式,但我不懂为何执行後到第a(20)就会爆掉..
但如果我不用回圈单纯输入a(20)=AA*3**20-0.4*(1/2)**30-0.1*30-0.05
这样就可以成功了@@
那到底为何无法用回圈跑出来~~~救命啊
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.26.246
1F:→ kotogen:你的code我可以编译成功 不知你说爆掉的意思是? 03/14 17:10
2F:→ gilocustom:变数型别有问题。 03/14 17:58
3F:→ gilocustom:再者,请留意浮点数与整数的运算上的差别。 03/14 18:02
http://ppt.cc/~MQT
就是会像这样!到第19项就算不下去了..
请帮帮我:(
4F:→ gilocustom:请先检查宣告的变数型别有无疑义。 03/14 18:20
5F:推 wenni:推楼上 请先检查宣告的变数型别有无疑义。 03/14 18:49
可以给点提示吗~"~ 难道a(n)不是用real?
但除了real也没有别的东西可以用了啊@@..
*[1;31m→ *[33mgilocustom*[m*[33m:你已经排除a了,但是n、i与AA呢? 03/15 00:00
都试过了.. 依然无解啊:(
我抓到应该是爆在3的20次方那里.. 但是为何会爆掉呢
而且是在回圈里才会爆掉 如果单纯计算
AA*3**20-0.4*(1/2)**20-0.1*20-0.05 就可以算出来
诡异啊~~~~~~~
→ Cypresslin:怎麽试的讲讲看吧 *[m 03/15 00:07
i跟n宣告integer应该没问题吧 AA宣告real(kind=8) 依然crash..
6F:→ gilocustom:所附程式码的n仍为real,请贴已订正"所有"型别问题的 03/15 00:54
7F:→ gilocustom:版本。 03/15 00:54
=================修正过後===============
program Q1
implicit none
integer,parameter :: n=30
real(kind=8) :: a(n)
integer i
real(kind=8) :: AA=0.0
do i=1,n
a(i)=AA*3**i-0.4*(1/2)**i-0.1*i-0.05
write(*,*) a(i)
end do
stop
end
==========================================
结果
http://ppt.cc/~MQT
附注:若a(n)改写成a(n)=-0.4*(1/2)**i-0.1*i-0.05则程式成功。
※ 编辑: darrenmm 来自: 111.240.210.163 (03/15 01:12)
8F:→ gilocustom:新的版本的型别问题还是没有完全订正。 03/15 01:21
9F:→ gilocustom:a(i)为双精度浮点数,但等号右侧既有双精度浮点数、 03/15 01:21
10F:→ gilocustom:单精度浮点数也有整数,型别并不一致。 03/15 01:22
11F:→ Cypresslin:把方程式各项拆开看,给你个关键字operator precedence 03/15 01:39
12F:→ latinboy:(1/2)这一项看起来很危险 03/17 08:22
13F:→ youlieme:等号右边非双精度值(含变数)加上 dble 如dble(i) 等 03/17 17:50
14F:→ bonbbon:改成 a(i)=AA*3.0**i...... 试试看吧 03/19 02:07