如何在GCC中打印/转换十进制浮点值?

问题描述 投票:0回答:1

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

c gcc floating-point decimal
1个回答
7
投票
正如文档所说,GCC不提供I/O,因为

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。

© www.soinside.com 2019 - 2024. All rights reserved.