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

7

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


1
http://sourceware.org/bugzilla/show_bug.cgi?id=11475 看起来相关。 - Mat
1个回答

7
正如文档所述,GCC不提供I/O,因为printf等是由libc而不是GCC提供的。
IBM为GNU C库做出了贡献,提供了一个扩展库libdfp,它添加了printf钩子以使十进制I/O工作。
README中写道:
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操作。


好的,libdfp似乎是正确的选择 - 不幸的是,它似乎无法通过Fedora存储库获得 - 从源代码编译也不那么直接 - 它抱怨“libbid中没有配置信息” - 另一方面,gcc编译的代码调用函数,例如__bid_muldd3(在对_Decimal64值进行操作时)- 没有链接错误 - 因此,gcc似乎在其运行时包含了libbid。 - maxschlepzig
尝试使用配置选项 --with-backend=libdecnumber,这可以让 configure 在 Fedora 17 上正常工作。configure --help 告诉我们这是默认设置,但显然它是错误的。不过我后来遇到了编译失败的问题。 - Jonathan Wakely
似乎这个库只能在IBM s390和powerpc系统上构建。 - Jonathan Wakely

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接