These diagrams illustrate the behaviour of the elementary Floating functions in the complex plane. They are based on those in "Common Lisp The Language Second Addition" by Guy L. Steele Jr. () The code was re-implemented in Haskell (using this).
This page shows the behaviour of Complex Double with the original Data.Complex implementation as in GHC 8.10.7. The graphs illustrate some of the defects, e.g.:
Incorrect branch cuts. In sqrt, the negative real axis (dotted orange) is mapped on top of the positive real axis (solid orange), leaving an "open edge" along the negative imaginary axis. The same can be seen in asin (where the positive axis is also impacted), atan (where the positive and negative imaginary axes are impacted), and others.
Loss of -0.0. In asin, the section -pi/2 to pi/2 "wobbles" between -0.0 and 0.0. Other graphs have similar wobbles.
Here is Steele's description of the graphs, with some [added commentary based on some modifications]:
Imagine the complex plane decorated as follows. The real and imaginary axes are painted with thick lines. [The lines on the axes are coloured, with a different colour for the positive and negative half of each axis. When negative zeros are supported, two lines are painted on each axis: a solid line for positive zero and a thicker dotted line for negative zero, and the lines are positioned either side of the axis line.] Parallels from the axes on both sides at distances of 1, 2 and 3 are painted with thin lines; these parallels are doubly infinite lines, as are the axes. [The parallels are coloured, with a different colour for each quadrant. The horizontal lines are dashed.] Four annuli (rings) are painted in gradated shades of grey. Ring 1, the inner ring, consists of points whose radial distances from the origin lie in the range [1/4, 1/2]; ring 2 is in radial range [3/4, 1]; ring 3, in the range [π/2, 2]; and ring 4, in the range [3, π]. Ring \(j\) is divided into \(2^{j+1}\) equal sectors, with each sector painted a different shade of grey, darkening as one proceeds counterclockwise from the positive real axis.
We can illustrate the behaviour of a numeric function \(f\) by considering how it maps the complex plane to itself. More specifically, consider each point \(z\) of the decorated plane. We decorate a new plane by colouring the point \(f(z)\) with the same colour that point \(z\) had in the original decorated plane. In other words, the newly decorated plane illustrates how \(f\) maps the axes, other horizontal and vertical lines, and annuli.
In each figure we will show only a fragment of the complex plane, with the real axis horizontal in the usual manner (-∞ to the left, +∞ to the right) and the imaginary axis vertical (-∞𝑖 below, +∞𝑖 above). Each fragment shows a region containing points whose real and imaginary parts are in the range [-4.1, 4.1]. The axes of the new plane are shown as very thin [black] lines, with large tick marks at integer coordinates and somewhat smaller tick marks at multiples of π/2.
The [first figure] shows the result of plotting the [id] function (quite literally); the graph exhibits the decoration of the original plane. [The remaining figures illustrate the mappings of the other elementary functions.]