2 slight optimization edited May 14 '12 at 13:26 J. M. is away♦ 100k1010 gold badges317317 silver badges474474 bronze badges In the interest of showing that there's more than one way to skin a cat, I present a method suitable for large positive arguments, due to Chiarella and Reichel. The method uses the approximation $$\exp(z^2)\mathrm{erfc}(z)\approx\frac{hz}{\pi}\left(z^{-2}+2\sum_{k \geq 1}\frac{\exp(-h^2 k^2)}{z^2+h^2 k^2}\right)$$ where $$h$$ is a suitably chosen parameter, based on the precision needed. f[z_?InexactNumberQ] := Module[{prec = Precision[z], y = z^2, e, h, j, k, s, t}, h = Pi/Sqrt[(Round[prec] + 1) Log[10]]; e = h^2; s = 0; j = k = 1; t = 0; While[True, t = Exp[-e k]/(y + e k); s += t; If[Abs[t] <= Abs[s] 10^-prec, Break[]]; kj += 2 j2; +k 1;+= j++];j]; h z (1/y + 2 s)/Pi] /; TrueQ[Quiet[z > 0]]  Again, this works best for large positive $$z$$, which seems to be the arguments of interest for the OP anyway. If evaluation for small $$z$$ is needed, a correction term has to be added to the Chiarella-Reichel approximation; see their paper for details. In the interest of showing that there's more than one way to skin a cat, I present a method suitable for large positive arguments, due to Chiarella and Reichel. The method uses the approximation $$\exp(z^2)\mathrm{erfc}(z)\approx\frac{hz}{\pi}\left(z^{-2}+2\sum_{k \geq 1}\frac{\exp(-h^2 k^2)}{z^2+h^2 k^2}\right)$$ where $$h$$ is a suitably chosen parameter, based on the precision needed. f[z_?InexactNumberQ] := Module[{prec = Precision[z], y = z^2, e, h, j, k, s, t}, h = Pi/Sqrt[(Round[prec] + 1) Log[10]]; e = h^2; s = 0; j = k = 1; t = 0; While[True, t = Exp[-e k]/(y + e k); s += t; If[Abs[t] <= 10^-prec, Break[]]; k += 2 j + 1; j++]; h z (1/y + 2 s)/Pi] /; TrueQ[Quiet[z > 0]]  Again, this works best for large positive $$z$$, which seems to be the arguments of interest for the OP anyway. If evaluation for small $$z$$ is needed, a correction term has to be added to the Chiarella-Reichel approximation; see their paper for details. In the interest of showing that there's more than one way to skin a cat, I present a method suitable for large positive arguments, due to Chiarella and Reichel. The method uses the approximation $$\exp(z^2)\mathrm{erfc}(z)\approx\frac{hz}{\pi}\left(z^{-2}+2\sum_{k \geq 1}\frac{\exp(-h^2 k^2)}{z^2+h^2 k^2}\right)$$ where $$h$$ is a suitably chosen parameter, based on the precision needed. f[z_?InexactNumberQ] := Module[{prec = Precision[z], y = z^2, e, h, j, k, s, t}, h = Pi/Sqrt[(Round[prec] + 1) Log[10]]; e = h^2; s = 0; j = k = 1; While[True, t = Exp[-e k]/(y + e k); s += t; If[Abs[t] <= Abs[s] 10^-prec, Break[]]; j += 2; k += j]; h z (1/y + 2 s)/Pi] /; TrueQ[Quiet[z > 0]]  Again, this works best for large positive $$z$$, which seems to be the arguments of interest for the OP anyway. If evaluation for small $$z$$ is needed, a correction term has to be added to the Chiarella-Reichel approximation; see their paper for details. 1 answered May 11 '12 at 19:59 J. M. is away♦ 100k1010 gold badges317317 silver badges474474 bronze badges In the interest of showing that there's more than one way to skin a cat, I present a method suitable for large positive arguments, due to Chiarella and Reichel. The method uses the approximation $$\exp(z^2)\mathrm{erfc}(z)\approx\frac{hz}{\pi}\left(z^{-2}+2\sum_{k \geq 1}\frac{\exp(-h^2 k^2)}{z^2+h^2 k^2}\right)$$ where $$h$$ is a suitably chosen parameter, based on the precision needed. f[z_?InexactNumberQ] := Module[{prec = Precision[z], y = z^2, e, h, j, k, s, t}, h = Pi/Sqrt[(Round[prec] + 1) Log[10]]; e = h^2; s = 0; j = k = 1; t = 0; While[True, t = Exp[-e k]/(y + e k); s += t; If[Abs[t] <= 10^-prec, Break[]]; k += 2 j + 1; j++]; h z (1/y + 2 s)/Pi] /; TrueQ[Quiet[z > 0]]  Again, this works best for large positive $$z$$, which seems to be the arguments of interest for the OP anyway. If evaluation for small $$z$$ is needed, a correction term has to be added to the Chiarella-Reichel approximation; see their paper for details.