Division by Zero When Using Ln or Exp Function

Division by Zero When Using Ln or Exp Function

In my code I sometimes get a division by zero. The debugger consistently points to a line containing an Ln or Exp function.

Using the Ln function. As you can see there is no division at all in this section. vsn stands for very small number and equals 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);

Using the Exp function: here a division exists but a fail to see how this can generate a division by zero error.

function TBack_Prop.g (value: double): double;
begin
   Result := 1 / (1 + exp (-value));
end; // g //

Any idea what I am doing wrong?

6

2 Answers

ln(0) will raise a division by zero. In your code you pass 0 to the ln function.

var
  I: Double;
  vsn: Double;
begin
  I := 1.0;
  vsn := 1.0e-100;
  I := I - vsn;
  ln(1 - I);
end;

Then line I := I - vsn does not really do anything. A double has only 15-16 significant digits, so the value of vsn does not modify I. Then you have ln(1-1) which is calculating ln(0).

exp(x) cannot become less than 0. So I cannot explain the division by 0 in TBack_Prop.g. I'd say the exception happens somewhere else.

5

Not having the rep to make a comment, I must comment by way of an answer.

The smallest workable size for vsn is 1.0e-16 when using real or double precision. This takes care of the first question answered by @Sebastion.

The second question is whether

(1 + exp(-value))

gives a result of 0, hence division by zero. Can't happen.
However, a typo

(1 - exp(-value)) or (1 - exp(value))

could certainly be the culprit, but that's just grabbing at straws.

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

James H. Sterling
Author

James H. Sterling

James Sterling reports on renewable energy developments, climate policy, ecological conservation, and green tech innovations around the globe.