Re: [問題] 新手寫程式~~

看板Fortran作者 (Beautiful People)時間14年前 (2010/04/14 10:00), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《tonyruler (TONY)》之銘言: : 問題是要做從 0積到0.5 1/(1+X^2) dx : 以下是我寫的程式 : program hwp165 : implicit none : integer i : real*8::z : z=0 浮點數要加小數點編譯器才會知道 像是 z=0.0 ,z=0.0_8 我的習慣是會再宣告一個指定精確度的整數 integer,parameter :: pre=8 之後所有的浮點數都可以寫成1.0_pre之類的 然後想改精確度 直接把那一行改成4或其他的就好了 : do i=0,5,0.05 計數器要用整數= = : z=z+0.005*(1/(1+(i*i)/100)) i => real(i) or dble(i) 100 => 100.0_pre : enddo : write(*,"(I15.14)")z 這邊浮點數要用F 而且用15.14不好 前面要設多一點 像是F17.13這樣因為小數點和負號也會佔空間 : stop : end 這邊我還是習慣寫end program 函式寫 end subroutine XXX 這樣才不會對錯 函式A對到函式B的結尾 結果你打錯 編譯還會過的情況發生 : ~ : 用f95可編譯後 : 執行執行檔 : 出現 : Floating point exception 是啥意思? : 還有 do的起始跟終點好像只能用整數的樣子? : 我宣告i為浮點數會出錯ㄟ : 有辦法把i設成浮點數?? : 幫幫新手XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.94.152 ※ 編輯: motoman 來自: 140.114.94.152 (04/14 10:01)

04/14 15:35, , 1F
不需要宣告pre, 100.0_pre 打成 100.d0就好了 d是double
04/14 15:35, 1F

04/14 18:54, , 2F
我也覺得不用宣告pre 直接雙精度就好哩
04/14 18:54, 2F
你們說的大部份情況都對~但是我們這樣寫是有各種的考量 第一個是有人在做計算時是希望他能隨時改精確度的 想要算快一點的 就先改成單精度 想求準 就用雙精度 或是更高 你沒有聽錯 我就看過有人用kind=10,12,或16在計算(不是我就是了) 而且線上的函式庫不支援這種格式 就自己寫了一個來呼叫XD 還有另一個是不同compiler的雙精度有可能準度不太一樣 同是kind=8或1d0 遇到別的compiler 還是會幫算 但最後幾位就會不太準 (雖然我還沒遇過例外) 其實我們會更保險的用selected_real_kind 這指令來給compiler自己選精度 這個程式也比較具有移植性 我還認識有人連迴圈計數器都設成kind=2為了讓計算更快一點 很恐怖= =|| ※ 編輯: motoman 來自: 140.114.94.152 (04/14 20:14) ※ 編輯: motoman 來自: 140.114.94.152 (04/14 20:16)

04/15 09:52, , 3F
收到~~~^^
04/15 09:52, 3F

04/15 23:14, , 4F
我照原波改了還是不行ㄟ~~~~~
04/15 23:14, 4F
文章代碼(AID): #1BnI6xHP (Fortran)
討論串 (同標題文章)
文章代碼(AID): #1BnI6xHP (Fortran)