【问题标题】:Print __float128, without using quadmath_snprintf打印 __float128,不使用 quadmath_snprintf
【发布时间】:2014-05-14 12:25:05
【问题描述】:

在我关于Analysis of float/double precision in 32 decimal digits 的问题中,有一个答案说看看__float128

我用过,编译器能找到,但我不能打印,因为编译器找不到标题quadmath.h

所以我的问题是:

  1. __float128 是标准的,对吗?
  2. 如何打印?
  3. quadmath.h 不是标准吗?

这些答案没有帮助:

  1. Use extern C
  2. Precision in C++
  3. Printing

ref 也没有帮助。

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

[编辑]

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

【问题讨论】:

  • 如前导下划线所示:不要使用它
  • 您是否检查了我提供给分析的链接?答案说这将是一种选择。没有?

标签: c++ c floating-point precision floating-point-precision


【解决方案1】:

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

【讨论】:

    【解决方案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 库:github.com/edwig/bcd 这是 MS Windows 特定的,但我破解了我的个人副本以删除 Windows 依赖项。
    【解决方案3】:

    不,它不是标准的 - 既不是类型也不是标题。这就是该类型有双下划线(保留名称)的原因。显然, quadmath.h 提供了一个quadmath_snprintf 方法。当然,在 C++ 中你会使用 &lt;&lt;

    【讨论】:

    • 不,你不能。 __float128&lt;&lt; 一起使用时会导致语法错误。编辑答案,我很乐意接受,谢谢。或者,如果您知道如何使用 &lt;&lt;,请随时教我(我们)。
    • @G.Samaras:我写了“would”而不是“can”,因为这是一个假设——如果quadmath 是一个C++ 库,它会提供&lt;&lt;
    • 恕我直言,您的语法具有误导性。然而,评论清除了这一点。您似乎有是否编辑的经验。接受并 +1。
    • 公平点,在互联网上很容易过于微妙。固定。
    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 2021-12-12
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多