1

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

ln(delta + A)

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

我应该分配什么价值delta?我要分配,delta = 1以便随时ln(delta + A)返回吗?0A0

此外,使用自然对数或base10或base2对数是否有任何选择规则?

以下是我正在使用的公式:

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

解释请参考这个链接:Log average brightness

4

1 回答 1

1

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

如果 A 通常是一个整数,但有时恰好是 0,那么返回会做你想做的事情,但是当 A 为 0 时返回 0。问题是如果你使用而不是,log(A + 1)它会对答案的使用产生什么影响,因为它们在数学上是不同的。log(A + 1)log(A)

- 编辑 -

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

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

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

作为(GNU)C示例。

于 2015-06-04T11:19:39.250 回答