先日、「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