How to print/convert decimal floating point values in GCC?
decimal, floating-point, gcc
Solution
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.
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.
But as noted in the comments below, this library was originally only supported on s390 and powerpc hardware. It looks like support for aarch64 was added a few months ago (September 2022), and there are directories for x86 and x86_64 so maybe it's now possible to do I/O for these types.
Problem
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`.