就在最近,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
创建自己的字符串函数。
显然,这似乎是我的安装错误。
虽然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;
}
nm .so文件,看看真正的函数名称。 IIRC,fortran例程有一个名字的末尾。在C ++中,您需要extern“C”{}原型。如果这是一个fortran接口,则所有args都通过引用传递,因此proto可能就像
extern "C" { long double fabsq_(long double* x); }