November 18, 2010
Andrei Alexandrescu wrote:
> On 11/18/10 1:25 PM, Don wrote:
>> Steven Schveighoffer wrote:
>>> On Thu, 18 Nov 2010 15:13:19 -0500, Don <nospam@nospam.com> wrote:
>>>
>>>> Lars T. Kyllingstad wrote:
>>>>> First of all, I think Andrei has already implemented this in the
>>>>> write*() functions. I use this toString() style also for
>>>>> std.complex.Complex, and I can print complex numbers no problem.
>>>>
>>>> Really? It doesn't work for me.
>>>>
>>>> import std.complex;
>>>> import std.stdio;
>>>>
>>>> void main()
>>>> {
>>>> cdouble z2 = 10 + 1.5e-6i;
>>>> Complex!(double) z;
>>>> z.re = 10;
>>>> z.im = 1.5e-6;
>>>> writefln("z= %.16f z2 = %.16f", z, z2);
>>>> }
>>>>
>>>> Prints:
>>>> z = 10+1.5e-06i z2 = 10.0000000000000000+0.0000015000000000i
>>>
>>> Haven't tested, but docs state that
>>>
>>> "Note that complex numbers are floating point numbers, so the only
>>> valid format characters are 'e', 'f', 'g', 'a', and 's', where 's'
>>> gives the default behaviour. ***Positional parameters are not valid in
>>> this context.***"
>>>
>>> I'd suggest trying one of those other format types without the numeric
>>> parts.
>>>
>>> -Steve
>>
>> writefln("z = %f z2 = %f", z, z2);
>> z = 10+1.5e-06i z2 = 10.000000+0.000001i
>> writefln("z = %e z2 = %e", z, z2);
>> z = 10+1.5e-06i z2 = 1.000000e+01+1.500000e-06i
>> writefln("z = %a z2 = %a", z, z2);
>> z = 10+1.5e-06i z2 = 0x1.4p+3+0x1.92a737110e454p-20i
> 
> Clearly there's a bug in the formatting logic. Should be easy to fix, but I'm groping for time at the moment. Don, could you please bugzillize? Thanks.
> 
> Andrei
http://d.puremagic.com/issues/show_bug.cgi?id=5237
November 18, 2010
On Thu, 18 Nov 2010 21:13:19 +0100, Don wrote:

> Lars T. Kyllingstad wrote:
>> First of all, I think Andrei has already implemented this in the
>> write*() functions.  I use this toString() style also for
>> std.complex.Complex, and I can print complex numbers no problem.
> 
> Really? It doesn't work for me.
> 
> import std.complex;
> import std.stdio;
> 
> void main()
> {
>      cdouble z2 = 10 + 1.5e-6i;
>      Complex!(double) z;
>      z.re = 10;
>      z.im = 1.5e-6;
>      writefln("z= %.16f z2 = %.16f", z, z2);
> }
> 
> Prints:
> z = 10+1.5e-06i z2 = 10.0000000000000000+0.0000015000000000i

Hm.  It must be calling toString() without any parameters then.  It's strange, I was sure I had tested it with different format strings...

-Lars
1 2 3
Next ›   Last »