舍入误差:谐波均值与小数的指数

时间:2017-04-18 19:36:50

标签: rounding mean exponential

我们说我有log_a1 = -1000,log_a2 = -1001和log_a3 = -1002。 n = 3

我想获得a1,a2和a3(不是log_a1,log_a2和log_a3)的调和平均值(HM),使得HM = n / [1 / exp(log_a1)+ 1 / exp(log_a2)+ 1 / EXP(log_a3)]。

然而,由于舍入误差exp(log_a1)= exp(-1000)= 0并且因此1 / exp(log_a)= inf且HM = 0。

有什么数学技巧要做吗?可以获得HM或log(HM)。

2 个答案:

答案 0 :(得分:2)

最好的方法可能是保持对数比例。许多科学语言都有 log-add-exp 函数(例如python中的numpy.logaddexp),它以高精度执行你想要的输入和结果的日志形式。

您的想法是想要计算e^-1000 + e^-1001 + e^-1002,因此您将其计算为e^-1000 (1 + + e^-1 + e^-2)并获取日志。结果是-1000 + log(1 + e^-1 + e^-2),可以在不损失精度的情况下计算。

答案 1 :(得分:0)

log(HM)= log(n)-log(1)+ log_a_max - log(sum(1./exp(log_ai - log_a_max)))

对于a = [ - 1000,-1001,-1002];

日志(HM)= - 1001.309