[問題] 為何這樣會爆掉@@@@@@@@@@@@@救命啊!!

看板Fortran作者 (mm)時間10年前 (2014/03/14 16:20), 編輯推噓1(1013)
留言14則, 7人參與, 最新討論串1/3 (看更多)
我的程式碼如下: ============================================== 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

03/14 17:10, , 1F
你的code我可以編譯成功 不知你說爆掉的意思是?
03/14 17:10, 1F

03/14 17:58, , 2F
變數型別有問題。
03/14 17:58, 2F

03/14 18:02, , 3F
再者,請留意浮點數與整數的運算上的差別。
03/14 18:02, 3F
http://ppt.cc/~MQT 就是會像這樣!到第19項就算不下去了.. 請幫幫我:(

03/14 18:20, , 4F
請先檢查宣告的變數型別有無疑義。
03/14 18:20, 4F

03/14 18:49, , 5F
推樓上 請先檢查宣告的變數型別有無疑義。
03/14 18:49, 5F
可以給點提示嗎~"~ 難道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..

03/15 00:54, , 6F
所附程式碼的n仍為real,請貼已訂正"所有"型別問題的
03/15 00:54, 6F

03/15 00:54, , 7F
版本。
03/15 00:54, 7F
=================修正過後=============== 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)

03/15 01:21, , 8F
新的版本的型別問題還是沒有完全訂正。
03/15 01:21, 8F

03/15 01:21, , 9F
a(i)為雙精度浮點數,但等號右側既有雙精度浮點數、
03/15 01:21, 9F

03/15 01:22, , 10F
單精度浮點數也有整數,型別並不一致。
03/15 01:22, 10F

03/15 01:39, , 11F
把方程式各項拆開看,給你個關鍵字operator precedence
03/15 01:39, 11F

03/17 08:22, , 12F
(1/2)這一項看起來很危險
03/17 08:22, 12F

03/17 17:50, , 13F
等號右邊非雙精度值(含變數)加上 dble 如dble(i) 等
03/17 17:50, 13F

03/19 02:07, , 14F
改成 a(i)=AA*3.0**i...... 試試看吧
03/19 02:07, 14F
文章代碼(AID): #1J8hlSpM (Fortran)
文章代碼(AID): #1J8hlSpM (Fortran)