-1

我有一个分布函数 f(x),保存在一个有两列的文件中(第一列是 x,第二列是 f(x)),例如

..
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)

4

1 回答 1

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)=0和之间的任何差异f(x)<1e-10

于 2013-05-26T15:02:41.800 回答