std.complex

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Wed Jan 1 17:17:52 PST 2014


On Wednesday, 1 January 2014 at 23:32:58 UTC, Lars T. Kyllingstad 
wrote:
> I'm not 100% convinced that a pure imaginary type is the way to 
> go.  You may be interested in reading a previous discussion, 
> where the subject of pure imaginary number support is brought 
> up:
>
>   http://forum.dlang.org/thread/flsf9u$jf$1@digitalmars.com

I have read through that thread already, but thank you for 
bringing it up -- it raises some issues that deserve an answer.

My own thoughts on the matter go something like this:

    * 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.

    * The idea of allowing imaginary literals but promoting them 
to complex when
      written to a variable sounds attractive but we can't 
discount the
      possibility that people will want to pass imaginary literals 
to functions
      or otherwise store them in variables, and later use them; if 
they are
      promoted to complex, calculations done with them may have 
lesser precision
      or even generate the aforementioned spurious results. I 
don't think simply
      writing to a variable should cause loss of precision like 
this.

    * 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.

    * The lack of closure under various operations is annoying but 
not
      insurmountable.

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.

Of course, an alternative would be to tweak the internals of 
Complex so that it can represent "purely real" and "purely 
imaginary" types precisely.

I'm writing from a phone now so it's not really convenient to 
explain at length, but I'll try to expand on the above in the 
next days.


More information about the Digitalmars-d mailing list