就在最近,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创建我自己的字符串函数之类的函数.
我尝试执行代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
用命令
g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)
我收到错误:
/tmp/cctqto7E.o: In function `main':
test.cpp:(.text+0x51): undefined reference to `quadmath_snprintf(char*, unsigned int, char const*, ...)'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
版本是:
g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not …Run Code Online (Sandbox Code Playgroud) 从另一个人的.c文件中,我看到了这个:
const float c = 0.70710678118654752440084436210485f;
Run Code Online (Sandbox Code Playgroud)
他想避免计算的地方sqrt(1/2).
这可以用普通的方式存储C/C++吗?我的意思是没有失去精确度.对我来说似乎不可能.
我正在使用C++,但我不相信这两种语言之间的精确差异太大(如果有的话),那就是为什么我没有测试它.
所以,我写了几行,看看代码的行为:
std::cout << "Number: 0.70710678118654752440084436210485\n";
const float f = 0.70710678118654752440084436210485f;
std::cout << "float: " << std::setprecision(32) << f << std::endl;
const double d = 0.70710678118654752440084436210485; // no f extension
std::cout << "double: " << std::setprecision(32) << d << std::endl;
const double df = 0.70710678118654752440084436210485f;
std::cout << "doublef: " << std::setprecision(32) << df << std::endl;
const long double ld = 0.70710678118654752440084436210485;
std::cout << "l double: " << std::setprecision(32) …Run Code Online (Sandbox Code Playgroud)