我想在大整数和双倍之间进行计算,例如, 1245 ..... 889 * 3.14 我认为我们不能从3.14构造cpp_int因为 http://www.boost.org/doc/libs/1_56_0/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html
此外,我不确定是否可以使用cpp_dec_float,因为cpp_dec_float需要指定不能任意大的有效位数。
这是否意味着我应该使用cpp_rational?但我必须首先在理性数字中转换3.14? how can I extract the mantissa of a double
我们有没有更好的方法来表示像3.14和大型int一样的双重?
谢谢,
答案 0 :(得分:1)
你的问题似乎很混乱,但这里有:
您可以通过为精度指定0
来使用动态精度的gmp_float:
<强> Live On Coliru 强>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/gmp.hpp>
#include <iostream>
int main() {
using Int = boost::multiprecision::cpp_int;
using Float = boost::multiprecision::number<boost::multiprecision::gmp_float<0>>;
Float fake_pi;
boost::multiprecision::default_ops::calc_pi(fake_pi.backend(), 2000);
Int value("12345678901234567890123456789012345678901234567890");
std::cout << std::fixed << value << " * " << fake_pi << " = " << Float(value.convert_to<Float>() * fake_pi);
}
打印
12345678901234567890123456789012345678901234567890 * 3.141593 = 38785094139697029053093797030280437291228399875653.959648