由于舍入误差无法得到三个数字的平均值:
平均值= 1/3 * [exp(a)+ exp(b)+ exp(c)]使得a = -1.11e4 b = -1.12e4且c = -1.13e4。有任何数学技巧吗?或者如何以日志值获得结果?
答案 0 :(得分:1)
您尝试查找log((exp(a) + exp(b) + exp(c)) / 3)
,但a
,b
和c
非常低,exp
的结果下溢为0。您可以通过调整值来解决此问题,以便exp
不会下溢。
让d = max(a, b, c)
。然后我们有以下平等:
M = log((exp(a) + exp(b) + exp(c)) / 3)
= log(exp(d) * (exp(a-d) + exp(b-d) + exp(c-d)) / 3)
= log(exp(d)) + log((exp(a-d) + exp(b-d) + exp(c-d)) / 3)
= d + log((exp(a-d) + exp(b-d) + exp(c-d)) / 3)
因此我们可以将结果计算为d + log((exp(a-d) + exp(b-d) + exp(c-d)) / 3)
。由于d
等于a
,b
或c
中的一个,因此exp
个参数之一为0,其余参数最多为0。因此,其中一个exp
输出为1,其余为最多1.我们不必担心溢出或下溢;虽然在一个或多个exp
调用中仍可能出现下溢,但它不再是问题,因为log
参数不会为0.