看板 Fortran 關於我們 聯絡資訊
我的程式碼如下: ============================================== 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
kotogen:你的code我可以編譯成功 不知你說爆掉的意思是? 03/14 17:10
gilocustom:變數型別有問題。 03/14 17:58
gilocustom:再者,請留意浮點數與整數的運算上的差別。 03/14 18:02
http://ppt.cc/~MQT 就是會像這樣!到第19項就算不下去了.. 請幫幫我:(
gilocustom:請先檢查宣告的變數型別有無疑義。 03/14 18:20
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..
gilocustom:所附程式碼的n仍為real,請貼已訂正"所有"型別問題的 03/15 00:54
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)
gilocustom:新的版本的型別問題還是沒有完全訂正。 03/15 01:21
gilocustom:a(i)為雙精度浮點數,但等號右側既有雙精度浮點數、 03/15 01:21
gilocustom:單精度浮點數也有整數,型別並不一致。 03/15 01:22
Cypresslin:把方程式各項拆開看,給你個關鍵字operator precedence 03/15 01:39
latinboy:(1/2)這一項看起來很危險 03/17 08:22
youlieme:等號右邊非雙精度值(含變數)加上 dble 如dble(i) 等 03/17 17:50
bonbbon:改成 a(i)=AA*3.0**i...... 試試看吧 03/19 02:07