numbers: be consistent with branch cuts and signed zero
Closes #661 (closed).
The issue #661 (closed) is related to signed zeros which are underspecified in Common Lisp with regards to branch cuts. If signed zeros are supported, the C standard decides which side of the branch cut to take according to the sign of the imaginary component (see http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf chapter 7.3.3):
CL-USER> (acos #C(2.0 +0.0))
#C(0.0 -1.316958)
CL-USER> (acos #C(2.0 -0.0))
#C(0.0 1.316958)
The CL ANSI standard specifies the branch cuts in detail, but is silent about signed zeros (the CLHS takes the same branch cut structure as the C standard if signed zeros are not supported, see again chapter 7.3.3 of the PDF linked above).
This merge request implements the same behaviour as the C99 complex functions in our fallback implementation, for consistency and because it makes the most sense mathematically.