就在最近,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
之类的函数来创建我的自己的字符串函数。
答案 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); }