【发布时间】:2015-04-13 19:19:35
【问题描述】:
在我的代码中,我有时会被零除。调试器始终指向包含 Ln 或 Exp 函数的行。
使用 Ln 函数。如您所见,本节中根本没有划分。 vsn 代表非常小的数字,等于 1.0e-100。
if a3 [row] <= 0 then a := vsn else
if a3 [row] >= 1 then a := 1 - vsn
else a := a3 [row];
costTerm := costTerm -1 * y [row] * Ln (a) -
(1 - 1 * y [row]) * Ln (1 - a);
使用 Exp 函数:这里存在除法,但看不到它如何生成除以零错误。
function TBack_Prop.g (value: double): double;
begin
Result := 1 / (1 + exp (-value));
end; // g //
知道我做错了什么吗?
【问题讨论】:
-
请提供 MCVE。在您这样做之前,没有问题需要回答。
-
有没有可能这是一个错误归因的错误,真正的问题是对
Ln的负输入? -
谷歌搜索 LNXP1。有实现 ln(x+1) 的 Delphi 数学库,可以为小值提供更准确的结果。
-
我想你更大的问题是你的表达式根本无法有效地评估接近 0 和 1。你真正的前进道路将涉及数学而不是编程。
-
@David,我猜你在数学上是对的。我会进去的。
标签: delphi math delphi-xe5