Math 将函数转换为日志空间

Math 将函数转换为日志空间,math,logarithm,Math,Logarithm,我必须实现几个功能,特别是: 问题是我有log(p)值来防止下溢。如何转换这些函数,使其值位于日志空间中 我知道对于p的乘积,我可以把它转换成log(p)的和,但我不确定其他的。谢谢 我的尝试是为了: 日志(1-10^log(p1)) 1-产品i,n(1-对数(pi))不确定 总和i,n(对数(π)) 总和,n(对数(pi)^wti) 和i,n(对数(pi))/n sum_i,n(wti*log(pi))/sum_i,n(wti)@chux我需要吗?p非常小(用户输入),所以我记录值,这样我可

我必须实现几个功能,特别是:

问题是我有log(p)值来防止下溢。如何转换这些函数,使其值位于日志空间中

我知道对于p的乘积,我可以把它转换成log(p)的和,但我不确定其他的。谢谢

我的尝试是为了:

日志(1-10^log(p1))

1-产品i,n(1-对数(pi))不确定

总和i,n(对数(π))

总和,n(对数(pi)^wti)

和i,n(对数(pi))/n


sum_i,n(wti*log(pi))/sum_i,n(wti)

@chux我需要吗?p非常小(用户输入),所以我记录值,这样我可以做一些事情,比如用p1乘以p2再乘以p3。@chux ok我编辑以包含我的尝试。我想您可能正在寻找一个在日志空间中添加两个值的函数,通常称为
logadd
,例如
double logadd(double a,double b){double t;if(b>a){t=b;b=a;a=t;}t=b-a;返回a+log1p(exp(t));}
?在日志空间中,乘法变成加法,除法变成减法,所以这部分很简单。@chux我需要吗?p非常小(用户输入)所以我记录值,这样我可以做一些事情,比如用p1乘以p2再乘以p3。@chux ok,我编辑了我的尝试。我想你可能正在寻找一个在日志空间中添加两个值的函数,通常称为
logadd
,例如
double logadd(double a,double b){double t;if(b>a){t=b;b=a;a=t;}t=b-a;返回a+log1p(exp(t));}
?在日志空间中,乘法变为加法,除法变为减法,因此部分是微不足道的。