# Compiling Error functions of complex values

According to List of compilable functions Erf and Erfc are compilable functions.

However, I want to make a compiled version of the PDF of a VoightDistribution to use in a NonlinearModelFit and it doesn't seem that the Erfc of a complex value will compile.

funcReal =
Compile[{{x, _Real}}, Erfc[x I], CompilationTarget -> "C",
RuntimeOptions -> "Speed"]
funcComplex =
Compile[{{x, _Complex}}, Erfc[x I], CompilationTarget -> "C",
RuntimeOptions -> "Speed"]

Needs["CompiledFunctionTools"];
CompilePrint[funcReal] (*same as funcComplex*)

1 argument
2 Real registers
4 Complex registers
Underflow checking off
Overflow checking off
Integer overflow checking off
RuntimeAttributes -> {}

R0 = A1
C0 = 0. + 1. I
R1 = 0.
Result = C3

1   C1 = R0 + R1 I
2   C1 = C1 * C0
3   C2 = R0 + R1 I
4   C2 = C2 * C0
5   C3 = MainEvaluate[ Hold[Erfc][ C2]]
6   Return


Note the call to MainEvalulate

Erfc[I] // N
funcReal[1]
funcComplex[1]

1. - 1.65043 I

1. - 1.65043 I

1. - 1.65043 I


All the functions work but because of the MainEvalulate they offer no performance benefit. How can I compile this function? Is this possible? Is there an alternative formula I could use?

Removing the CompilationTarget doesn't solve the problem either.

-
They compile for real values, but do not appear to compile for complex arguments. –  asim Feb 20 '13 at 17:56
Look at e.g. Plot3D[Arg@Erf[x + I y], {x, -5, 5}, {y, -5, 5}]. This is not a function you would probably wish to try to find an alternative formula for, even approximately. –  Oleksandr R. Feb 20 '13 at 18:25
On the other hand, regarding the PDF of the Voigt distribution: dx.doi.org/10.1016/0368-2048(94)02189-7 –  Oleksandr R. Feb 20 '13 at 18:46

In[1]:= PseudoVoigtDistribution[de_, si_] :=
`