std.complex
Lars T. Kyllingstad
public at kyllingen.net
Thu Jan 2 14:26:13 PST 2014
On Thursday, 2 January 2014 at 01:17:54 UTC, Joseph Rushton
Wakeling wrote:
> * There are calculations involving "pair of reals"
> implementations of complex
> numbers that generate spuriously incorrect results.
> They're corner cases,
> but they exist.
>
> * A purely imaginary type allows those calculations to be
> performed
> correctly. It also allows more precise calculations in
> general for cases
> where the real part of a complex number is known to be 0.
So we have three choices:
1. We add a dedicated Imaginary type, and leave Complex more or
less the way it is. The pros are that it provides a way to
represent imaginary numbers "correctly", while keeping Complex
simple and performant. The cons are that Complex still gives
wrong (or at least somewhat unexpected) results in the
aforementioned corner cases, and that we add a new type with
extremely limited usability.
2. Special-case Complex for imaginary numbers. The pros are that
it solves the problems Imaginary was intended to solve, and we
don't need a new type. The cons are that the Complex
implementation becomes more complex (haha) and less performant,
and that we actually change the semantics of IEEE floating-point
"zero" somewhat.
3. Leave std.complex as-is, and make sure people know what the
problematic cases are.
They all suck. I don't know what is the lesser of three evils
here, but I too am starting to lean towards 1. I'm probably
going to continue playing devil's advocate, though. ;)
> * You can do calculations involving purely real-valued
> numbers and complex
> numbers and not run into the same issues, because purely
> real values are
> supported. So you should be able to do the same with
> purely imaginary
> numbers.
That argument is fallacious. Imaginary numbers are quite
different from real numbers.
> I should add that as far as I'm concerned what I want is simply
> to find the best possible way to represent and use purely
> imaginary numbers in D. I don't mind if, having done that, the
> code winds up being rejected, as long as the exercise proves
> useful.
I think it's great that you're doing this. :)
More information about the Digitalmars-d
mailing list