c++ - 让 boost multiprecision 的 gmp_int 类型工作

标签 c++ boost

我正在尝试在 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;
}

但它在我上面标记的行中抛出“无效操作数”错误。如果有人能找到解决此问题的方法,并且 - 更重要的是 - 首先解释出了什么问题,我们将不胜感激。

[编辑]

sehe的回答好像解决了第一个问题,又产生了一个新的问题。现在我明白了:

体系结构 x86_64 的 undefined symbol : “___gmp_get_memory_functions”,引用自: boost::multiprecision::backends::gmp_int::str(long, unsigned int) const in main.o “___gmpz_clear”,引用自: main.o 中的 boost::multiprecision::backends::gmp_int::~gmp_int() “___gmpz_get_str”,引用自: boost::multiprecision::backends::gmp_int::str(long, unsigned int) const in main.o “___gmpz_init”,引用自: boost::multiprecision::backends::gmp_int::operator=(char const*) in main.o main.o 中的 boost::multiprecision::backends::gmp_int::gmp_int() “___gmpz_mul_ui”,引用自: boost::multiprecision::backends::eval_multiply(boost::multiprecision::backends::gmp_int&, boost::multiprecision::backends::gmp_int const&, long) in main.o “___gmpz_neg”,引用自: boost::multiprecision::backends::eval_multiply(boost::multiprecision::backends::gmp_int&, boost::multiprecision::backends::gmp_int const&, long) in main.o “___gmpz_set_str”,引用自: boost::multiprecision::backends::gmp_int::operator=(char const*) in main.o “___gmpz_set_ui”,引用自: boost::multiprecision::backends::gmp_int::operator=(char const*) in main.o ld: 找不到体系结构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

[/编辑]

最佳答案

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";
}

关于c++ - 让 boost multiprecision 的 gmp_int 类型工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701193/

相关文章:

c++ - boost::lexical_cast<int> ("-138.8468953457983248") 抛出异常

c# - 需要帮助选择数据库服务器

c++ - boost::exists 表示符号链接(symbolic link)不取消引用

c++ - 使用 websocketpp 时出现 "No matching function for call to bind"

c++ - 使用(自定义)GCC 4.x 或 5.x 时,Boost 构建无法通过 C++11 功能检查

c++ - 是否有 boost/tr1 shared_ptr 的 boost-independent 版本

c++ - Qt 5.6 测试版 Visual Studio 2015

从指向对象的指针访问运算符 () 的 C++ 语法

c++ - 计算器的读/写文件 : atof error

c++ - 当我使用 rtsp 相机流时,opencv 视频捕捉滞后