[Issue 9297] Formatting of floating point values in std.format truncates reals to double

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Feb 26 16:56:29 PST 2013


http://d.puremagic.com/issues/show_bug.cgi?id=9297


hsteoh at quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hsteoh at quickfur.ath.cx


--- Comment #1 from hsteoh at quickfur.ath.cx 2013-02-26 16:56:01 PST ---
Does gcc/g++ support 80-bit floats? I made a little test program in a Linux
environment, and it seems that in spite of the cast, some extra precision is
still getting through:

import std.stdio;

void main() {
        // Stuff with way too many digits than the types can handle, to see how
        // far they get.
        enum float phi_f = 1.6180339887_4989484820_4586834365f;
        enum double phi_d = 1.6180339887_4989484820_4586834365;
        enum real phi_r = 1.6180339887_4989484820_4586834365L;

        // The exact digits, taken from:
        //
        //
http://fabulousfibonacci.com/portal/index.php?option=com_content&view=article&id=7&Itemid=17
        //
        // (NOTE: the last digit is actually 6 if we round up the next digit
        // instead of truncating. But built-in types won't even come close to
        // that point).
        string phi_s = "1.618033988749894848204586834365";

        writeln(float.dig);
        writeln(double.dig);
        writeln(real.dig);

        writefln("%.25f", phi_f);
        writefln("%.25f", phi_d);
        writefln("%.25f", phi_r);
        writefln("%s", phi_s);
}


Output:

$ ./test
6
15
18
1.6180340051651000976562500
1.6180339887498949025257389
1.6180339887498948482072100
1.618033988749894848204586834365
$

Notice that the third line, which is the formatting of real, shows up with more
matching digits than double. Could this be something to do with the way the
Linux C/C++ ABI works (IIRC some floats gets passed in the FPU registers where
they retain their 80-bit precision)?

I don't have a way to test this on VC, though.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list