相关疑难解决方法(0)

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

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

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

c++ floating-point gcc quadruple-precision

13
推荐指数
1
解决办法
2万
查看次数

使用quadmath的G ++ 4.6.3 Linux中的四倍精度

我尝试执行代码

#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)

linux ubuntu quadruple-precision

6
推荐指数
1
解决办法
1162
查看次数

32位十进制数的浮点/双精度分析

从另一个人的.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)

c c++ precision

3
推荐指数
1
解决办法
1976
查看次数

标签 统计

c++ ×2

quadruple-precision ×2

c ×1

floating-point ×1

gcc ×1

linux ×1

precision ×1

ubuntu ×1