Re: [問題] 新手寫程式~~
※ 引述《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
04/14 15:35, 1F
推
04/14 18:54, , 2F
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
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章