On Tue, 11 May 2010 15:08:07 +0000, eles wrote: > Maybe I am wrong, but my feeling is that if the complex numbers were a > native type (like creal&co. are now), then it would have been possible > to have a dedicated formatting (just like %f, %d and %s are) for > writefln. > > Putting the type into the library seems to forbid some very nice things: > > - initializing with "Complex!double z=1+2i" or "Complex!double z=1+2*i"
I don't think there will still be a special syntax for complex literals when the built-in types are deprecated. I'd guess not. It is, however, likely that creal etc. will be aliases for Complex!real etc. And this doesn't look that bad: auto z = cdouble(1,2); > or or > "Complex!double z=2.23*exp(1.107*i)" syntax (which is very practical) - The following does just that, and IMO it looks a lot better: auto z = fromPolar(2.23, 1.107); > even in C99 one could write "complex double z=1+2*I" (but "I" is a > defined symbol) - instead of "Complex!double(2,3)" If you want that, just define immutable I = Complex!float(0, 1); Perhaps it would be an idea to put that in std.complex, but I'm not convinced. > - lack of support for formatting in writef (although, that should not > be > limited to native types) > - formatting in writef/printf is quite versatile for regular use, and > could be > immediately extended to complex numbers (e.g. if one formatting is > specified, then both real and imaginary parts would be displayed with > that format), although 2 different complex-number formats should be > defined: real/imaginary and amplitude/phase This is exactly what I'm proposing. Complex numbers don't have to be built-in for that. -Lars