std.complex

Ali Çehreli acehreli at yahoo.com
Fri Nov 22 23:43:56 PST 2013


On 11/22/2013 09:22 PM, Craig Dillabaugh wrote:

 > On Saturday, 23 November 2013 at 04:37:19 UTC, Shammah Chancellor wrote:
 >> //Hijack
 >>
 >> http://digitalmars.com/d/1.0/cppcomplex.html
 >>
 >>> • Consider the formula (1 - infinity*i) * i which should produce
 >>> (infinity + i). However, if instead the second factor is (0 + i)
 >>> rather than just i, the result is (infinity + NaN*i), a spurious NaN
 >>> was generated.
 >>> • A distinct imaginary type preserves the sign of 0, necessary for
 >>> calculations involving branch cuts.
 >>
 >> Is this stuff no longer an issue?
 >>
 >> -Shammah
 >
 > I believe D used to have builtin complex types, back in the old days.
 > They have been removed (deprecated?)

It still compiles.

 > and replaced by the library type
 > std.complex.
 >
 > At least that is my understanding.

And it makes what Shammah Chancellor quoted even more interesting. 
cdouble and idouble still work correctly but std.complex produces 
"incorrect" result:

import std.stdio;
import std.complex;

void main()
{
     writeln(complex(1.0L, -real.infinity) * complex(0.0, 1.0L));
     writeln((1L - ireal.infinity) * 1i);
}


The output:

inf-nani    <-- "incorrect" according to the quoted page
inf+1i      <-- correct

 >
 > Craig
 >

Ali



More information about the Digitalmars-d mailing list