不使用quadmath_snprintf打印__float128

5
在我的问题 浮点数和双精度在32位小数的分析 中,有一个答案说要看一下 __float128
我使用了它,编译器可以找到它,但是我不能打印它,因为编译器找不到头文件 quadmath.h
所以我的问题是:
  1. __float128 是标准的吗?
  2. 如何打印它?
  3. quadmath.h 不是标准的吗?
这些答案没有帮助:
  1. 使用extern C
  2. C ++中的精度
  3. 打印

ref也没有帮助。

请注意,我不想使用任何非标准库。

[编辑]

即使答案是否定的,如果这个问题有答案也会很有用。


正如前导下划线所示:请勿使用它。 - user2249683
你有检查我提供的分析链接吗?答案说这将是一个选项。不是吗? - gsamaras
3个回答

2
使用Boost库对我来说是最好的答案:
#include <boost/multiprecision/float128.hpp>
#include <boost/math/special_functions/gamma.hpp>

using namespace boost::multiprecision;  

float128 su1= 0.33333333333333333q;
cout << "su1=" << su1 << endl;

记得链接这个库:

-lquadmath

对于那些坚持完美精度的人,可以尝试使用此BCD库: https://github.com/edwig/bcd 它是面向MS Windows的,但我修改了我的个人副本以删除Windows依赖项。 - Chris Pollitt

1

在GNU-Fortran中工作!它允许以不同的精度运行相同的程序:单精度(32位)、双精度(64位)、扩展精度(80位)和四重精度(128位)。您不必更改程序,只需将所有浮点数写为“real”。浮点数的大小由编译器选项-freal-4-real-8、-freal-4-real-10和-freal-4-real-16设置。


0
不,这不是标准 - 无论是类型还是头文件都不是。这就是为什么类型有一个双下划线(保留名称)。显然,quadmath.h 提供了一个 quadmath_snprintf 方法。在 C++ 中,你当然会使用 <<。

1
不可以。当与<<一起使用时,__float128会导致语法错误。编辑答案,我将很高兴地接受它,谢谢。或者,如果你知道如何让它与<<配合工作,请随意教我(们)。 - gsamaras
@G.Samaras:我写的是“would”而不是“can”,因为这是一个假设 - 如果quadmath是一个C++库,它将提供<< - MSalters
在我看来,你的语法有些误导性。不过评论说明了这一点。你似乎有经验能够判断是否需要进行编辑。接受并点赞。 - gsamaras
说得好,互联网上很容易过于微妙。已修复。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接