Re: [問題] 迴圈拆開計算後與原本值有微小誤差
※ 引述《boa85391 ( )》之銘言:
: rpq= dsqrt(rx**2+ry**2+rz**2)
: if (rpq<=r_c) then
: if (bead(i)%bead_number==1 .and. bead(j)%bead_number==1) then
: rep_term=dabs(24.d0*eps_hh*(2.d0*sigma**12*rpq**(-14)&
: -sigma**6*rpq**(-8)))
上述浮點數的運算為了避免誤差累積以及增加效率
可以改成
r2 = 1.d0 / (rx*rx + ry*ry + rz*rz)
r6 = r2 * r2 * r2
a2 = sigma * sigma
a6 = a2 * a2 * a2
ar6 = a6 * r6
rep_term = dabs( 24.d0 * eps_hh * ar6 * r2 * ( 2 * ar6 - 1.d0 ) )
少掉速度慢的開根號、次方運算
且避掉浮點數誤差累積的部分
數學上等價,但是在運算中的精確度與速度會有明顯差異
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.87.154.227
※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1439434296.A.7ED.html
推
08/13 12:22, , 1F
08/13 12:22, 1F
→
08/13 12:24, , 2F
08/13 12:24, 2F
推
08/14 21:59, , 3F
08/14 21:59, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章