Boost.Multiprecision - Boost.Randomの分布クラスを使用する

先日、「Boost.Multiprecision ビット数指定の乱数生成」で、independent_bits_engineを紹介しましたが、Boost.Multiprecisionの多倍長整数と多倍長浮動小数点数は、Boost.Randomの既存の分布クラスにも適用できます。


以下は、無限精度のcpp_intで、256ビット範囲の整数を一様分布する例です。

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/random.hpp>

using namespace boost::multiprecision;

int main()
{
    boost::random::mt19937 gen;
    boost::random::uniform_int_distribution<cpp_int> dist(0, cpp_int(1) << 256);

    for (int i = 0; i < 10; ++i) {
        cpp_int x = dist(gen);
        std::cout << x << std::endl;
    }
}
12721121657520147247744796431842326146296294180809160027132416389225539366745
86048861429530654936263414134573980939351899046345384016090167510299251354700
92318707092390309667619537865027027210880142102296802958866406274214679608686
76840269649240973945508128641415259490679375154523618053296924666747244530145
21638369166612496703991271955994563624044383325105383029306009417224944272131
18301817935393127802089972652716485743813683848783811659110956904604801347879
29443864768371479638569291508833888407601656281146407182742643794912208802075
105065656370372942850491059223730839192340039485476129882023701358534452377711
40719389611374008816670379602691043502331655232426105801761101543745325969258
80502468118786077251351960159582402132028251195083466513051147130539980435295

参照:
Generating Random Numbers - Boost Multiprecision Library