Branch cuts for the special functions are hard. Here's how they're done in cmucl.
In this we follow Kahan in how to interpret mathematical operations.
Let r be a real number and z = x + iy be a complex number whose real and imaginary parts are x and y, respectively. Then
z = x + iy
r + z = r + x + iy
r - z = r - x - iy
Note that this is distinctly different from normal Common Lisp contagion rules which say r is converted to the complex number r + 0i before performing the operation.
r + 0i
Likewise, for multiplication we have
rz = rx + iry
iz = ix - y