【问题标题】:Using boost cpp_int for functions like pow() and rand()对 pow() 和 rand() 等函数使用 boost cpp_int
【发布时间】:2017-09-11 18:12:02
【问题描述】:

需要存储非常大的整数,所以我使用 boost::multiprecision::cpp_int。问题是,在使用这种新类型时,我无法弄清楚如何使用它从 pow() 和 rand() 等其他函数中获取我想要的值。

我需要存储一个非常大的数字,该数字是通过指数计算的。但 pow() 函数本身无法处理如此大的数字,而 rand() 返回基本整数。

更具体地说,我只需要存储值 2^1024 并生成一个介于 1 和 2^1024 之间的随机数。但我一直在努力让它发挥作用。

cpp_int x = pow(2,1024);
x = rand() % x + 1;

由于我上面所说的原因,这样的东西不起作用。我也尝试过 boost::multiprecision::pow,但这似乎不适用于 cpp_int。为了让这些相对简单的操作适用于大整数,我需要跳过哪些环节?

【问题讨论】:

标签: c++ boost pow


【解决方案1】:

您需要使用multiprecision version of pow(在该页面上搜索pow),然后使用支持通用操作的随机数生成器,例如Boost.Random(或严重基于的C++11 standard random library Boost.Random):

#include <iostream>
#include <boost/random/random_device.hpp>
#include <boost/random.hpp>
#include <boost/multiprecision/cpp_int.hpp>
int main()
{
    namespace mp = boost::multiprecision;
    mp::cpp_int x = mp::pow(mp::cpp_int(2), 1024);
    std::cout << x << "\n";

    boost::random::random_device gen;
    boost::random::uniform_int_distribution<mp::cpp_int> ui(1, x);

    for(unsigned i = 0; i < 10; ++i) {
        mp::cpp_int y = ui(gen);
        std::cout << y << "\n";
    }
}

Live code

【讨论】:

  • power 函数有效,但该代码的其余部分编译时出现 3 个错误“未定义对 `boost::random::random_device::~random_device()'| 的引用”
  • 顺便说一句,我正在使用 code::blocks。显然这是一个链接问题,但我不确定我需要链接什么文件
  • 没关系,使用不同的随机生成器解决了这个问题。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多