On Saturday, 11 July 2026 at 08:33:13 UTC, Damian McGuckin wrote:
On Friday, 10 July 2026 at 15:21:08 UTC, Nick Treleaven wrote:
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.

Don said:

Complex numbers are fundamental to mathematics in a way that quaternions are not.

Though however important something is, it doesn't automatically justify having a language feature if a library solution is good enough. I'm not saying there isn't a justification for complex numbers in the language, but the technical case needs to be made.

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.

Would it help to use UFCS?
```d
import std;

auto i(T)(T im) => complex(0, im);

void main()
{
    auto c = 4 + 2.i;
    c.writeln;
}
```

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.

A justification is in the D vs C++ article link I sent you earlier.

There is a Phobos issue for imaginary support:
https://github.com/dlang/phobos/issues/10022

Reply via email to