【问题标题】:How to use Gcc 4.6.0 libquadmath and __float128 on x86 and x86_64如何在 x86 和 x86_64 上使用 Gcc 4.6.0 libquadmath 和 __float128
【发布时间】:2011-09-21 09:24:31
【问题描述】:

我有一个中等大小的 C99 程序,它使用 long double 类型(80 位)进行浮点计算。我想通过新的 GCC 4.6 扩展 __float128 来提高精度。据我所知,它是一个软件模拟的 128 位精度数学。

我应该如何通过全精度软件模拟将我的程序从经典的 80 位长双精度浮点数转换为 128 位四进制浮点数? 我需要改变什么?编译器标志、来源?

我的程序使用strtod 读取全精度值,对它们执行许多不同的操作(如+-*/ sin、cos、exp 和其他来自<math.h>)和printf-ing .

PS:尽管 float128 仅针对 Fortran (REAL*16) 声明,但 libquadmath 是用 C 编写的,它使用 float128。我不确定 GCC 是否会将 float128 上的操作转换为运行时库,并且我不确定如何在我的源代码中从 long double 迁移到 __float128。

PPS:有一个关于“C”语言gcc模式的文档:http://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html

"GNU C 编译器支持 ... 128 位 (TFmode) 浮点类型。对其他类型的支持包括算术运算符:加、减、乘、除;一元算术运算符;关系运算符;相等运算符 ... i386、x86_64" 支持 __float128 类型

【问题讨论】:

标签: gcc floating-point precision 128-bit


【解决方案1】:

我应该如何将我的程序从经典的 80 位长双精度浮点数转换为 128 位四浮点数,并使用全精度软件模拟?我需要改变什么?编译器标志、来源?

您需要最新的软件、支持 __float128 类型(4.6 和更高版本)和 libquadmath 的 GCC 版本(仅在 x86 and x86_64 targets 上支持;在 IA64 和 HPPA 中具有更新的 GCC)。您应该添加链接器标志-lquadmathcannot find -lquadmath' 将表明您没有安装 libquadmath)

您还应该知道,从 4.6 开始,如果给出了选项 -fdefault-real-8 并且没有选项 -fdefault-double-8,则 Gfortran 将使用 __float128 类型进行双精度。这可能是个问题,因为在许多平台上,由于软件计算,128 long double 比标准 long double 慢得多。 (感谢 glennglockwood http://glennklockwood.blogspot.com/2014/02/linux-perf-libquadmath-and-gfortrans.html 发帖)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2014-05-26
    • 2017-12-01
    相关资源
    最近更新 更多