看到名称和Boost Multiprecision documentation,我期望cpp_dec_float_50
数据类型的精度为50个小数位:
使用typedef cpp_dec_float_50隐藏多精度的复杂性,使我们能够定义具有50个小数位精度的变量,就像内置的double一样。
(虽然我不理解与double的比较-我的意思是double
通常实现二进制浮点算术,而不是十进制浮点算术。)
这也与以下代码的输出相匹配(除了double部分,但这是预期的):
cout << std::numeric_limits<boost::multiprecision::cpp_dec_float_50>::digits10
<< '\n';
// -> 50
cout << std::numeric_limits<double>::digits10 << '\n';
// -> 15
但是为什么下面的代码会打印出74个数字呢?
#include <boost/multiprecision/cpp_dec_float.hpp>
// "12" repeated 50 times, decimal point after the 10th digit
boost::multiprecision::cpp_dec_float_50 d("1212121212.121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212");
cout << d.convert_to<string>() << '\n';
// Expected output: 50 digits
// Actual output: 74 digits
// -> 1212121212.1212121212121212121212121212121212121212121212121212121212121212
str()
成员函数按预期工作,例如。
cout << d.str(50) << '\n';
只打印50位数字 - 其中它被记录为:
返回格式化为字符串的数字,至少精确到precision位,并且如果scientific为true,则以科学计数法表示。