计算对数时的delta值

时间:2015-06-04 11:08:15

标签: math logarithm natural-logarithm

我使用公式计算参数,公式涉及取值的对数,有时可以为零。为了处理这种情况,我在文献中读到了将delta值设置如下的技术:

ln(delta + A)

此处,参数A是一个实数,范围为[0, 1]

我应该为delta赋予什么价值?我应该指定delta = 1,以便只要ln(delta + A)0A就会返回0吗?

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

以下是我使用的公式:

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

请参阅此链接以获取解释:Log average luminance

1 个答案:

答案 0 :(得分:1)

不知道A的范围是什么,很难回答。

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

- 编辑 -

对于A作为[0,1]范围内的实数值,log(A)的值无论如何都是负数。在这种情况下log(0)的合理答案是-Infinity。大多数编程语言使用IEEE 754 standard来表示浮点值,该标准包含-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示例。