function mass_diameter_air (                                      {Tammet95m}
                    millibar,
                    Celsius,
                    density {g cm-3, for cluster ions typically 2},
                    charge  {e, for cluster ions 1},
                    Z       {cm2 V-1 s-1} : real) : real;
 {Uses external function "electrical_mobility_air"}
  var y0, dx, d1, d2 : real;
  function y (d : real) : real;
     begin // nnn := nnn + 1;
     y := 1.6022 * charge /
        electrical_mobility_air (millibar, Celsius, density, charge, d);
     end;
  begin
  y0 := 1.6022 * charge / Z;
  d1 := ((0.6 + sqrt (0.36 + 200 * 150 / y0)) / (150 / y0) - 0.35) /
                (1.1 + 0.001 * z * z * z * charge * charge);
  d2 := d1;
  while y (d1) > y0 do d1 := d1 / 1.2;
  while y (d2) < y0 do d2 := d2 * 1.2;
  repeat dx := (d1 + d2) / 2;
     if y (dx) > y0 then d2 := dx else d1 := dx;
  until abs (d2 - d1) / d1 < 1e-6;
  mass_diameter_air := (d2 + d1) / 2;
  end;