function charge_probability {of charge qe on a particle of diameter d}
       (q0 {number of elementary charges}: integer;
        dp {particle diameter : nm},
        di {ion diameter : nm},
         T {air temperature : K} : real) : real;
  {Uses external function "attachment_coefficient", presumtions:
   +- symmetry, ion density 2 g cm-3, air pressure 1013 mb}
   var         j, q : integer;
     Nq, Nj, c, sum : real;
   begin
   q := abs (q0);
   Nj := 1; c := 1; sum := 1; j := 0; Nq := 0;
   while (j <= q) or (c > 1e-12) do begin
      if j = q then Nq := Nj;
      c := attachment_coefficient (j, di, 2, dp, T, 1013) /
           attachment_coefficient (-j - 1, di, 2, dp, T, 1013);
      Nj := Nj * c;
      sum := sum + 2 * Nj;
      j := j + 1;
   end;
   charge_probability := Nq / sum;
   end;