On Tue, 11 May 2010 11:51:34 +0000, eles wrote: > the following test case also works: > > Compiling > > import std.stdio; > import std.complex; > > Complex!(double) x,y; > > int main(){ > writefln("salut!\n"); > x.re=1; > x.im=1; > y=x.conj(); > writefln("x=%f+%f*i\n",x.re,x.im); > writefln("y=%f+%f*i\n",y.re,y.im); > return 0; > } > > > results in > > C:\dmd2>dmd test.d > > C:\dmd2>test > salut! > > x=1.000000+1.000000*i > > y=1.000000+-1.000000*i > > C:\dmd2>
Cool! > Which is OK. However, displaying complex numbers in that way is not very > nice. Is there any dedicated formatting for that? (it would be nice to > be able displaying a complex number in both Cartesian and Polar formats) The problem is that there doesn't seem to be any "standard" way of converting stuff to strings in Phobos. The toString() function I put into Complex is designed to write complex numbers to an arbitrary output range. It may seem very verbose when all you want to do is to get a simple string representation, but it was meant as a proposal for exactly such a standard. Another possibility was proposed by Don, as demonstrated in std.bigint.BigInt.toString(): http://www.digitalmars.com/d/2.0/phobos/std_bigint.html#toString The idea is that if a type defines such a toString(), it should -- in the future, that is -- work automatically with std.conv.to(), std.stdio.writef*() etc. Then you'd be able to do things like auto z = Complex!real(1, -2); auto str1 = to!string(z); assert (str1 == "1-2i"); writefln("%.2g", z); // Prints "1.00-2.00i" Right now, you are kind of stuck with the way you demonstrated, or you can have Complex.toString() write to an std.array.Appender!string range. -Lars