【发布时间】: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 类型
【问题讨论】:
-
libquadmath 在这里 gcc.gnu.org/onlinedocs/libquadmath/index.html#toc_Top 和这里是关于这个 gcc.gnu.org/gcc-4.6/changes.html 的新闻“GCC 现在附带 LGPL 许可的 libquadmath 库,它为具有 __float128 数据类型的目标提供四精度数学函数。__float128可用于 32 位 x86、x86-64 和 Itanium 架构上的目标。"
-
转为
glibc/soft-fp完成基本操作,例如__subtf3()koala.cs.pub.ro/lxr/#glibc+2.9/soft-fp/subtf3.c#L35gcc.gnu.org/wiki/Software_floating_point -
使用 libquadmath,您可以使用strtoflt128 作为
strtod的替代品。
标签: gcc floating-point precision 128-bit