Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print/convert decimal floating point values in GCC?

The GCC docs describe limited decimal floating point support in recent GCCs.

But how do I actually use it?

For example on Fedora 18, GCC 4.7.2.

A simple C program like

int main()
{
    _Decimal64 x = 0.10dd;
    return 0;
}

compiles (when using -std=gnu99) - but how do I actually do other useful stuff - like printing _Decimal64 values or converting strings to _Decimal64 values?

The docs talk about 'a separate C library implementation' for (I assume) things like printf - which additional library do I have to use for - say - printing the result of a decimal floating point computation?

I've tried

printf("%Df\n", x);

which did not work - printf just produced: %Df.

like image 459
maxschlepzig Avatar asked Feb 17 '13 18:02

maxschlepzig


1 Answers

As the docs say, GCC doesn't provide I/O, because printf etc. are provided by libc not by GCC.

IBM contributed an extension to the GNU C library, libdfp, which adds printf hooks to make Decimal I/O work. I haven't used it, but you should be able to get the code from the eglibc svn repository and build it yourself:

svn co http://www.eglibc.org/svn/libdfp/trunk libdfp

A web search indicates Ubuntu packages this as libdfp, and it might be available on RHEL6 too.

The README says:

When libdfp is loaded printf will recognize the following length modifiers:

        %H - for _Decimal32
        %D - for _Decimal64
        %DD - for _Decimal128

It will recognize the following conversion specifier 'spec' characters:

        e,E
        f,F
        g,G
        a,A  (as debuted in ISO/IEC TR 24732)

Therefore, any combination of DFP length modifiers and spec characters is
supported.
like image 197
Jonathan Wakely Avatar answered Sep 29 '22 06:09

Jonathan Wakely