13

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

有什么方法可以让这些函数在 C++ 中工作,或者是否有一些替代库可以用于数学函数__float128?在 GCC 中获得四精度浮点数的最佳方法是什么?现在,我可以对它们进行加减乘乘,但这对我来说毫无用处,考虑到我无法将它们转换为字符串或使用诸如truncq和之类的函数fabsq来创建我自己的字符串函数。

4

2 回答 2

8

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

虽然 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;
}
于 2011-03-29T02:04:15.633 回答
4

nm .so 文件,并查看真正的函数名称。IIRC,fortran 例程的名称末尾有一个 _。在 C++ 中,您需要 extern "C" {} 原型。如果这是一个 fortran 接口,那么所有 args 都通过引用传递,所以 proto 可能类似于

extern "C" { long double fabsq_(long double* x); }
于 2011-03-29T01:18:06.627 回答