计算对数时的delta值

delta value while calculating logarithm

我正在使用公式来计算参数,该公式涉及对有时可能为零的值取对数。为了处理这种情况,我在文献中阅读了如下技术来放置一些增量值:

ln(delta + A)

这里的参数A是一个实数,取值范围是[0, 1]

我应该为 delta 分配什么值?我应该分配 delta = 1,以便 ln(delta + A) 将 return 0 只要 A0 吗?

另外,请问使用自然对数或10进制或2进制对数有什么选择规则吗?

以下是我使用的公式:

Lw = exp[ 1 / N( sum[ log( delta + Lw( x, y ) ) ] ) ]

解释请参考这个link:Log average luminance

不知道A的范围是多少,很难回答。

如果A一般是一个整数,但恰好有时是0,那么returning log(A + 1)会如你所愿,但是当A为0时return0。问题是如果您使用 log(A + 1) 而不是 log(A) 会对答案的使用产生什么影响,因为它们在数学上是不同的。

-- 编辑--

对于 [0,1] 范围内的实数 A,log(A) 的值无论如何都会是负数。在这种情况下,log(0) 的合理答案是 -Infinity。大多数编程语言使用 IEEE 754 standard 来表示浮点值,并且该标准包含一个 -Infinity 的值作为特殊值之一。在这里使用 -Infinity 将保持单调性,即如果 a < b,则 log(a) < log(b),即使 a == 0.

代码将取决于登录使用的实现;除非确定 log(0) 会 return -Infinity,否则显而易见的事情就是检查:

if(A == 0)
   result = -INFINITY; // macro in math.h
else
   result = log(A); 

作为 (GNU) C 示例。