2013-05-26 81 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任何区别。