Boost C++如何输出没有指数字符的浮点值的所有数字?
Posted
技术标签:
【中文标题】Boost C++如何输出没有指数字符的浮点值的所有数字?【英文标题】:Boost C++ how to output all digits of float values without the exponent character? 【发布时间】: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”部分。我怎样才能做到这一点?此外,如果其他人可以帮助我输出准确的值,那也将非常有帮助。
谢谢。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Boost C++如何输出没有指数字符的浮点值的所有数字?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Boost Python 从 C++ bool 转换为 Python boolean?
C++ Primer 5th笔记(chap 17 标准库特殊设施)输出补白