GCC文档描述了最近海湾合作委员会中的limited decimal floating point support。
但我该如何实际使用它?
例如在Fedora 18上,GCC 4.7.2。
像
这样的简单C程序int main()
{
_Decimal64 x = 0.10dd;
return 0;
}
编译(当使用-std = gnu99时) - 但我如何实际做其他有用的东西 - 比如打印_Decimal64值或将字符串转换为_Decimal64值?
文档讨论了(我假设)像printf这样的'单独的C库实现' - 我必须使用哪个额外的库 - 比如说 - 打印十进制浮点计算的结果?
我试过
printf("%Df\n", x);
哪个不起作用 - printf刚生成:%Df
。
答案 0 :(得分:5)
正如文档所说,GCC不提供I / O,因为printf
等由libc而不是GCC提供。
IBM为GNU C库libdfp贡献了一个扩展,它增加了printf
个钩子来使Decimal I / O工作。我没有使用它,但你应该能够从eglibc svn存储库获取代码并自己构建它:
svn co http://www.eglibc.org/svn/libdfp/trunk libdfp
网络搜索表明Ubuntu将其打包为libdfp
,它也可能在RHEL6上提供。
自述文件说:
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.