it's time to change how things are printed

Don nospam at nospam.com
Thu Nov 18 14:19:30 PST 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 at 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


More information about the Digitalmars-d mailing list