std.complex
Joseph Rushton Wakeling
joseph.wakeling at webdrake.net
Tue Nov 26 03:22:22 PST 2013
On 26/11/13 02:02, Andrei Alexandrescu wrote:
> If you got the blessing of some complex number expert, that would be great.
I'm in Italy, I could ask the pope ... :-)
As far as I can see the behaviour of std.complex.Complex is consistent both with
C++'s std::complex and with D's own internal cfloat/cdouble/creal types. The
only case we don't cover with std.complex is that of multiplying a complex
number with a purely imaginary one (the equivalent of multiplying, say, a creal
and an ireal; multiplying a creal and a creal, even if the real part of the
latter is 0, will give the same results as std.complex).
We _could_ tweak Complex internally so that in the event that its real part is
0, it behaves like a purely imaginary number, and if its imaginary part is 0, it
behaves like a purely real number; but that's problematic for reasons already
discussed, because it doesn't distinguish between a purely imaginary number
versus one where the real part is so vanishingly small that FP considers it to be 0.
(It also leaves std.complex' behaviour incompatible with std::complex and other
library implementations, though I guess that's less of a concern so long as we
think what std.complex does is right.)
So, as other people have suggested, really the only thing we can reasonably do
is to define a separate Imaginary type -- or get round the problems with the
built-in complex and imaginary types. It is really a shame if they are as
problematic as I've heard. :-(
More information about the Digitalmars-d
mailing list