C ++中的四倍精度(GCC)

时间:2011-03-27 18:44:18

标签: c++ gcc floating-point quadruple-precision

就在最近,GCC 4.6.0与libquadmath一起发布。不幸的是,GNU支持Fortran,但不支持C或C ++(所有包含的都是.so)。我还没有找到在C ++中使用这些新功能的方法,但是,GNU C支持保证四倍精度浮点数的__float128类型。 GNU C似乎不支持libquadmath中的数学函数,例如fabsq(绝对值,q是quad的后缀。)

有没有办法让这些函数在C ++中运行,还是有一些替代库可以用于__float128的数学函数?在GCC中使用四倍精度浮子的最佳方法是什么?现在,我可以添加,减去和相乘它们,但这对我来说没用,考虑到我无法将它们转换为字符串或使用truncqfabsq之类的函数来创建我的自己的字符串函数。

2 个答案:

答案 0 :(得分:7)

显然,这似乎是我的安装错误。

虽然GCC的核心C / C ++部分包括libquadmath.so,但Fortran版本提供了libquadmath.a和quadmath.h,可以包含它们来访问这些函数。

#include <quadmath.h>
#include <iostream>
int main()
{
  char* y = new char[1000];
  quadmath_snprintf(y, 1000, "%Qf", 1.0q);
  std::cout << y << std::endl;
  return 0;
}

答案 1 :(得分:4)

nm .so文件,看看究竟是什么函数名。 IIRC,fortran例程名称末尾。在C ++中,您需要extern“C”{}原型。如果这是一个fortran接口,则所有args都通过引用传递,因此proto可能类似于

extern "C" { long double fabsq_(long double* x); }