0

手动将具有大负指数(如 1e-300)的数字设置为零以避免 Matlab 中的下溢是一种好习惯吗?

如果不是,我们在实现 log(1+exp(x)) 等函数时如何避免下溢的危害?

4

1 回答 1

1

通常,在添加非常大和非常小的值时会遇到麻烦,因为这会导致较高的相对误差。去掉这个求和 (1+exp(x)),当 x 很大时,它很快就会超出 double 值的范围。

log(1+exp(x))
log(1+1/exp(x))*exp(x))
log(1+1/exp(x))+log(exp(x))
log(1+1/exp(x))+x

另一种方法是使用 vpa:

log(1+exp(vpa(10^6)))

非常慢,但您会得到配置精度的结果。

我从未见过手动将小值设置为零的情况是一个好的解决方案,通常与容差相比更好。

于 2014-05-13T17:31:08.320 回答