function plain_Millikan_diameter (millibar, Celsius, Z {cm2V-1s-1} : real) : real; {Uses external function "plain_Millikan_mobility". If failed then result = 0. The diameter correction 0.3-0.6 can be added to the returned value of d} var c, d, test : real; n : integer; begin c := 100; n := 0; repeat n := n + 1; d := (0.6 + sqrt (0.36 + 200 * c * Z)) / (c * Z) - 0.4; test := plain_Millikan_mobility (millibar, Celsius, d); c := (1.2 / (d + 0.4) + 200 / sqr (d + 0.4)) / test; until (abs (test / Z - 1) < 1e-6) or (n = 99); if n < 99 then plain_Millikan_diameter := d else plain_Millikan_diameter := 0; end;