There is an approximation offered by Winitzki (Winitzki, 2003 - http://dl.acm.org/citation.cfm?id=1756839), which provides the complex value of the principal branch with a relative error of less than 0.01 in the entire complex plane:
where A ~ 2.344, B ~ 0.8842, C ~ 0.9294, D ~ 0.5106, E ~ -1.213, and y2 = 2ez + 2.
If you need greater accuracy, I guess a simple numerical algorithm can be used, seeded with the above value, to refine the estimate of W(z) to arbitrary precision.
called “best approximation to the LambertW(x) or exp(LambertW(x))” which is conducted on the MathOverflow forum. From this valuable text you can get to know for example that:
“The Lambert W(x) function is implemented in various software packages, as ProductLog[x] in Mathematica, for example. And Mathematica can compute numerical values for specific x out to as many digits as you like”
You may find my note at Arxiv 1504.01964 helpful. It provides a fast way to compute v = W(u) if u > 0 and all you want is the positive branch. That is, the branch which is called W_0 in the Corless, et al, paper and which is called W_p in the NIST Handbook of Mathematical Functions (page 111). Here is some detail:
Suppose v = W(u) is to be computed, for u > 0 and v > 0. Change to log-log coordinates, by setting v = exp(y) and u = exp(x). That is, y = ln(v) and x=ln(u). Use the method described in the Arxiv note to compute the function called g in that note, which satisfies y = g(x) = ln(W(exp(x))). The name of that function is the logWright function, since W(exp(x)) is called the Wright function.
The computation of y = g(x) should be quite accurate for only a couple of iterations. See details in the note.
Now, given y, compute v = exp(y).
Hence you do this...
Given u > 0 That is, you must verify the input argument is valid.
Compute v = W(u) = exp(g(ln(u))) using your implementation of g function.