GCC 文档描述了最近 GCC 中的有限十进制浮点支持。
但是我该如何实际使用它呢?例如在 Fedora 18、GCC 4.7.2 上。
一个简单的 C 程序,例如
int main()
{
_Decimal64 x = 0.10dd;
return 0;
}
编译(使用 -std=gnu99
时) - 但我实际上如何做其他有用的事情 - 例如打印
_Decimal64
值或将字符串转换为
_Decimal64
值?文档讨论了“一个单独的 C 库实现”(我假设)类似
printf
- 我必须使用哪个附加库 - 例如 - 打印十进制浮点计算的结果?我已经尝试过了
printf("%Df\n", x);
这不起作用 - printf 刚刚生成:%Df
。
printf
等是由libc而不是GCC提供的。IBM 为 GNU C 库贡献了一个扩展,
libdfp,它添加了 printf
钩子以使 Decimal I/O 工作。自述文件说:
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.
但正如下面的评论所述,该库最初仅在 s390 和 powerpc 硬件上支持。看起来几个月前(2022 年 9 月)添加了对 aarch64 的支持,并且有 x86 和 x86_64 的目录,所以也许现在可以对这些类型进行 I/O。