获得提升multiprecision的gmp_int类型

时间:2015-04-17 13:52:03

标签: c++ boost

我试图在C ++中使用boost multiprecision库,但我遇到了gmp_int类型的问题。我获取boost库的全部目的是使用任意大整数进行算术运算,所以我做了以下代码,看看是否一切正常:

#include <iostream>
#include <boost/multiprecision/gmp.hpp>

using namespace std;
namespace mp=boost::multiprecision;

int main()
{
    mp::gmp_int n;
    cin>>n;         //Here's the
    n=n*2           //problem (at least according to Xcode 5).
    cout<<n<<"\n";
    return 0;
}

但它投掷了无效的操作数&#34;上面标记的行中的错误。如果有人能找到解决方案 - 更重要的是 - 首先解释出了什么问题,我们将非常感激。

[编辑]

谢谢的回答似乎已经解决了第一个问题,并创造了一个新问题。现在我得到了这个:

架构x86_64的未定义符号:   &#34; ___ gmp_get_memory_functions&#34;,引自:       main.o中的boost :: multiprecision :: backends :: gmp_int :: str(long,unsigned int)const   &#34; ___ gmpz_clear&#34;,引自:       main.o中的boost :: multiprecision :: backends :: gmp_int :: ~gmp_int()   &#34; ___ gmpz_get_str&#34;,引自:       main.o中的boost :: multiprecision :: backends :: gmp_int :: str(long,unsigned int)const   &#34; ___ gmpz_init&#34;,引自:       main.o中的boost :: multiprecision :: backends :: gmp_int :: operator =(char const *)       main.o中的boost :: multiprecision :: backends :: gmp_int :: gmp_int()   &#34; ___ gmpz_mul_ui&#34;,引自:       在main.o中的boost :: multiprecision :: backends :: eval_multiply(boost :: multiprecision :: backends :: gmp_int&amp;,boost :: multiprecision :: backends :: gmp_int const&amp;,long)   &#34; ___ gmpz_neg&#34;,引自:       在main.o中的boost :: multiprecision :: backends :: eval_multiply(boost :: multiprecision :: backends :: gmp_int&amp;,boost :: multiprecision :: backends :: gmp_int const&amp;,long)   &#34; ___ gmpz_set_str&#34;,引自:       main.o中的boost :: multiprecision :: backends :: gmp_int :: operator =(char const *)   &#34; ___ gmpz_set_ui&#34;,引自:       main.o中的boost :: multiprecision :: backends :: gmp_int :: operator =(char const *) ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

[/编辑]

1 个答案:

答案 0 :(得分:1)

gmp_int是后端类型。

使用number<gmp_int>将其调整为通用算术类型。在这种情况下,mpz_int已经是那种类型:

<强> Live On Coliru

#include <boost/multiprecision/gmp.hpp>
#include <iostream>

namespace mp = boost::multiprecision;

int main() {
    mp::mpz_int n;
    std::cin >> n;
    n = n*2;
    std::cout << n << "\n";
}