我被要求改進我們多年來一直使用的奇異值分解的代碼(它來自Fortran的Numerical Recipes的最新版本),但有人將它改編爲不同的真實類型kind
類型。我有一些問題,一個關於精度,關於浮點比較別人,而是先在這裏的一些代碼(僅顯示相關的東西):Fortran遺留代碼
implicit real(kind=selected_real_kind(12)) (a-h,o-z) ! not from Numerical Recipes
parameter R12 = selected_real_kind(12), eps=tiny(1.0_R12) ! not from Numerical Recipes
do i=1,n
scale=0.0
if (i.le.m) then
do k=i,m
scale=scale+abs(a(k,i))
end do
if (scale.ne.0.0) then
scale=0.0
應該是scale=0.0_R12
,對不對?- 爲了避免明確的
.ne.
比較,還是應該將它與某個epsilon進行比較,是否可以將scale.ne.0.0
換成scale.gt.0.0
(因爲它不能是< 0)? - 關於最後一點,選擇上述比較中的ε值優選哪個固有函數
tiny
和epsilon
? - 如果測試值不等於0可能是正數和負數,那麼
(value.gt.eps .or. value.lt.-1.0_R12*eps)
是否合理?
感謝您的幫助!
是否可以使用像[lapack](http://www.netlib.org/lapack/)這樣的專用優化庫? – damienfrancois
.gt.0.0的準確度如何高於.ne.0.0?令人驚訝的是,有多少人知道,比較浮游物可能會導致假陽性/陰性,但神奇地認爲不平等會表現得更好或免疫......如果你對.eq有一些愚蠢的棉絨規則。那麼它必須同樣適用於.gt。 –
注意隱式聲明使*參數* R12 *真實*。 – agentp