2013-05-26 71 views
-1

我有一個分佈函數f(x),保存在一個文件中有兩列(第一列是x,第二列是f(x)),例如如何在Fortran 77中處理INF?

.. 
1.667 0.815083333 
1.668 0.810443333 
1.669 0.813403333 
1.67 0.810623333 
1.671 0.804236667 
1.672 0.805286667 
... 

在這個函數中,我需要減去對數。由於對於x的某個值,分佈可能爲0,對於x的某個值,對數可能是無窮大。這樣,當我在文件上寫-log(f(x))我可能會

3.894 13.8155106 
3.895 13.8155106 
3.896 INF 
3.897 INF 
3.898 INF 

,如果我最終讀取該文件,那麼該程序將因錯誤

invalid number: incomprehensible list input 
apparent state: unit 17 named fort.17 
last format: list io 
lately reading direct formatted external IO 
Aborted (core dumped) 

什麼是重寫的最佳方式退出程序,以便它可以處理讀取/寫入-log(0)

+0

這將是很好的舉止來解釋爲什麼你會downvote我的問題,以便我可以問以後更好的:-) –

回答

0

我的猜測是隻使用無限大的模擬值,所以我們只在f(x)>epsilonepsilon爲合適的低閾值時取對數,否則使用合適的大數值。

 do ir = 0, nbb 
     if (targetdbb(ir) .gt. 1.d0e-10) then 
      eibb(ir) = -log(targetdbb(ir)) 
     else 
      eibb(ir) = 100000 
     endif 
    enddo 

這是將解決該問題的特設實現,只要我們能接受失去f(x)=0f(x)<1e-10任何區別。