※ 引述《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 ) )
少掉速度慢的開根號、次方運算
且避掉浮點數誤差累積的部分
數學上等價,但是在運算中的精確度與速度會有明顯差異