【发布时间】:2014-04-28 14:18:29
【问题描述】:
我必须以编程方式确定表达式的值:
S = log(x1y1 + x2y2 + x3 y3 ...)
仅使用以下值:
lxi = log(xi) lyi = log(yi)
计算每个 lxi 和 lyi 的反对数可能是不切实际的,也不是想要的...
有没有什么方法可以把这个评估分解成一个简单的总结?
编辑
我在某处看到了一个 C 函数,它以简单的求和方式进行计算:
double log_add(double lx, double ly)
{
double temp,diff,z;
if (lx<ly) {
temp = lx; lx = ly; ly = temp;
}
diff = ly-lx;
z = exp(diff);
return lx+log(1.0+z);
}
为每对值添加返回值,这似乎给出了正确的答案。但我无法弄清楚它是如何以及为什么起作用的!
【问题讨论】:
-
不可能。你必须得到反日志。另外,反对数也不难得到,只要做 10^(log(xi))
-
@sshashank124 说的,但是如果日志是自然对数,用e代替10。
-
@sshashank124 请查看编辑。
-
@MikeDunlavey 请查看编辑。
-
log_add是一个聪明的方法来做 一个 反日志而不是 两个。如果您愿意,我们可以引导您完成。
标签: math optimization logarithm expression-evaluation natural-logarithm