gpt4 book ai didi

c++ - 如何在数字上处理 log(0)?

转载 作者:行者123 更新时间:2023-11-30 03:20:04 25 4
gpt4 key购买 nike

我正在使用一个幂等矩阵,其特征值接近 01。我感兴趣的功能是

-e(i)*log(e(i)) - (1-e(i))*log(1-e(i))

其中 e(i) 是矩阵的第 i 个特征值。当特征值恰好为 0 时,则第一项利用,反之亦然。

最佳答案

有很多方法可以解决对 log(0) 的调用。

您可以将表达式分解为两个具有特殊情况的子表达式:

auto A = e(i) == 0 ? 0 : -e(i)*log(e(i));
auto B = e(i) == 1 ? 0 : (1-e(i))*log(1-e(i));
return A - B;

你可以先处理这两种特殊情况:

if (e(i) == 0 || e(i) == 1) {
return 0;
}
return -e(i)*log(e(i)) - (1-e(i))*log(1-e(i))

您可以定义自己的特殊log:

auto logOrZero = [](double f) -> double {
return f == 0 ? 0 : log(f);
};
return -e(i)*logOrZero(e(i)) - (1-e(i))*logOrZero(1-e(i));

等等。

在任何情况下,您不仅要小心将零传递给 log,还要小心传递接近零的值,因为存在精度问题。

关于c++ - 如何在数字上处理 log(0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53131363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com