Arn*_*old 0 delphi math delphi-xe5
在我的代码中,我有时会得到零除.调试器始终指向包含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);
Run Code Online (Sandbox Code Playgroud)
使用Exp函数:这里存在一个除法,但是没有看到它如何产生零除错误.
function TBack_Prop.g (value: double): double;
begin
Result := 1 / (1 + exp (-value));
end; // g //
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
ln(0)将除数提高零.在您的代码中,您将0传递给ln函数.
var
I: Double;
vsn: Double;
begin
I := 1.0;
vsn := 1.0e-100;
I := I - vsn;
ln(1 - I);
end;
Run Code Online (Sandbox Code Playgroud)
然后行I := I - vsn并没有真正做任何事情.double只有15-16位有效数字,因此vsn的值不会修改I.然后你有ln(1-1)计算ln(0).
exp(x)不能小于0.所以我无法用0来解释除法TBack_Prop.g.我会说异常发生在其他地方.