【问题标题】:Boost C++ how to output all digits of float values without the exponent character?Boost C++如何输出没有指数字符的浮点值的所有数字?
【发布时间】:2020-03-01 14:53:35
【问题描述】:
    #include <iostream>
    #include <boost/multiprecision/cpp_dec_float.hpp>
    #include <boost/multiprecision/cpp_int.hpp>
    using boost::multiprecision::number;
    using boost::multiprecision::cpp_dec_float;
    using boost::multiprecision::cpp_dec_float_50;
    using boost::numeric_cast;
    using std::cout;


    int main()
    {
        srand(time(NULL));


        std::cout << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
        cpp_dec_float_50 x = 0.0001;
        cpp_dec_float_50 y = x*x*x*x;
        std::cout << s << "\n";
    }

所以我按照这里的文档:https://www.boost.org/doc/libs/1_63_0/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html

我期望得到的输出是:0.00000000000000000001(20 个零)

但是程序的输出是:

对于这个问题,我只想删除“e^-16”部分。我怎样才能做到这一点?此外,如果其他人可以帮助我输出准确的值,那也将非常有帮助。

谢谢。

【问题讨论】:

    标签: c++ boost precision boost-multiprecision


    【解决方案1】:

    您已经用二进制双精度值实例化了x,它不能表示为十进制。解决方法如下:

    #include <iostream>
    #include <boost/multiprecision/cpp_dec_float.hpp>
    
    using boost::multiprecision::cpp_dec_float_50;
    
    int main()
    {   
        std::cout << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
        cpp_dec_float_50 x{"0.0001"};
        cpp_dec_float_50 y = x*x*x*x;
        std::cout << std::fixed;
        std::cout << y << "\n";
    }
    

    输出:

    0.00000000000000010000000000000000000000000000000000
    

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2020-09-14
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      相关资源
      最近更新 更多