作者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