On Friday, 10 July 2026 at 15:21:08 UTC, Nick Treleaven wrote:

One difference is that `*=` with an imaginary (or complex) type on the right-hand side is not allowed:

Yes, but that operation is illegal mathematics so quite expected.


Also Don made an argument why imaginary types are not needed in D:
https://forum.dlang.org/post/[email protected]

Interesting arguments. Not sure I agree with all of it. What is done in C99 (and even C23) reflects the mathematics, so it is not a hack.

While 2D CFD (computational fluid dynamics) uses complex arithmetic, 3D CFD does not (it needs quaternions which are way too specialised). But structural dynamics uses complex and imaginary numbers extensively in both 2D and 3D, to handle the phase of a dynamic load. Also, the field of engineering uses complex numbers even more extensively but as I am not an electrical engineer, I will leave niche alone.

When I used D well over 15 years ago, all our work was done with reals. But I have been using the complex arithmetic of Chapel for nearly a decade and its imaginary and complex types made life a dream for dealing with this task. It is also so much easier to explain the complex arithmetic in the program logic if one can talk about real and imaginary numbers when discussing complex numbers. Trying to explain complex numbers in terms of a complex number with a real component of zero is recursive and I find recursive explanations very difficult to write.

I will look through those old discussions although they all seem to deal with the removal of an imaginary type. I was actually looking for the justification for their original inclusion in D which would be very much earlier.

Reply via email to