Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rounding 舍入误差:具有小数值指数的调和平均值_Rounding_Mean_Exponential - Fatal编程技术网

Rounding 舍入误差:具有小数值指数的调和平均值

Rounding 舍入误差:具有小数值指数的调和平均值,rounding,mean,exponential,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) 最好的方法可能是保持对数规模。许多科学

假设我有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)

最好的方法可能是保持对数规模。许多科学语言都有一个log add exp函数(例如在python中),它可以实现您想要的高精度功能,输入和结果都是日志形式

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

log(HM)=log(n)-log(1)+log\u max-log(和(1./exp(log\u ai-log\u max)))

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

对数(HM)=-1001.309