让 boost multiprecision 的 gmp_int 类型起作用
Getting boost multiprecision's gmp_int type to work
我正在尝试在 C++ 中使用 boost 多精度库,但我遇到了 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;
}
但它在我上面标记的行中引发了 "invalid operand" 错误。如果有人能找到解决此问题的方法,并且 - 更重要的是 - 首先解释出了什么问题,我们将不胜感激。
[编辑]
sehe的回答貌似解决了第一个问题又产生了新的问题。现在我明白了:
未定义的体系结构符号x86_64:
“___gmp_get_memory_functions”,引用自:
boost::multiprecision::backends::gmp_int::str(long, unsigned int) main.o 中的常量
“___gmpz_clear”,引用自:
boost::multiprecision::backends::gmp_int::~gmp_int() 在 main.o
“___gmpz_get_str”,引用自:
boost::multiprecision::backends::gmp_int::str(long, unsigned int) main.o 中的常量
“___gmpz_init”,引用自:
boost::multiprecision::backends::gmp_int::operator=(char const*) 在 main.o
boost::multiprecision::backends::gmp_int::gmp_int() 在 main.o
“___gmpz_mul_ui”,引用自:
boost::multiprecision::backends::eval_multiply(boost::multiprecision::backends::gmp_int&, boost::multiprecision::backends::gmp_int const&, long) 在 main.o
“___gmpz_neg”,引用自:
boost::multiprecision::backends::eval_multiply(boost::multiprecision::backends::gmp_int&, boost::multiprecision::backends::gmp_int const&, long) 在 main.o
“___gmpz_set_str”,引用自:
boost::multiprecision::backends::gmp_int::operator=(char const*) 在 main.o
“___gmpz_set_ui”,引用自:
boost::multiprecision::backends::gmp_int::operator=(char const*) 在 main.o
ld:未找到体系结构的符号 x86_64
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
[/edit]
gmp_int
是后端类型。
使用number<gmp_int>
将其适配为通用算术类型。在这种情况下,mpz_int
已经是那个类型:
#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";
}
我正在尝试在 C++ 中使用 boost 多精度库,但我遇到了 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;
}
但它在我上面标记的行中引发了 "invalid operand" 错误。如果有人能找到解决此问题的方法,并且 - 更重要的是 - 首先解释出了什么问题,我们将不胜感激。
[编辑]
sehe的回答貌似解决了第一个问题又产生了新的问题。现在我明白了:
未定义的体系结构符号x86_64: “___gmp_get_memory_functions”,引用自: boost::multiprecision::backends::gmp_int::str(long, unsigned int) main.o 中的常量 “___gmpz_clear”,引用自: boost::multiprecision::backends::gmp_int::~gmp_int() 在 main.o “___gmpz_get_str”,引用自: boost::multiprecision::backends::gmp_int::str(long, unsigned int) main.o 中的常量 “___gmpz_init”,引用自: boost::multiprecision::backends::gmp_int::operator=(char const*) 在 main.o boost::multiprecision::backends::gmp_int::gmp_int() 在 main.o “___gmpz_mul_ui”,引用自: boost::multiprecision::backends::eval_multiply(boost::multiprecision::backends::gmp_int&, boost::multiprecision::backends::gmp_int const&, long) 在 main.o “___gmpz_neg”,引用自: boost::multiprecision::backends::eval_multiply(boost::multiprecision::backends::gmp_int&, boost::multiprecision::backends::gmp_int const&, long) 在 main.o “___gmpz_set_str”,引用自: boost::multiprecision::backends::gmp_int::operator=(char const*) 在 main.o “___gmpz_set_ui”,引用自: boost::multiprecision::backends::gmp_int::operator=(char const*) 在 main.o ld:未找到体系结构的符号 x86_64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
[/edit]
gmp_int
是后端类型。
使用number<gmp_int>
将其适配为通用算术类型。在这种情况下,mpz_int
已经是那个类型:
#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";
}