November 18, 2010 Re: it's time to change how things are printed | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | 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 Re: it's time to change how things are printed | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don | 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
|
Copyright © 1999-2021 by the D Language Foundation