如何使用boost multiprecision计算大型int和double数

时间:2016-03-07 22:37:07

标签: c++ boost largenumber

我想在大整数和双倍之间进行计算,例如,      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一样的双重?

谢谢,

1 个答案:

答案 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