Sophie

Sophie

distrib > Mageia > 5 > i586 > by-pkgid > dc51b8a2b4c20bd1ac1b9c8f81249719 > files > 2264

boost-examples-1.55.0-8.mga5.noarch.rpm

///////////////////////////////////////////////////////////////
//  Copyright 2011 John Maddock. Distributed under the Boost
//  Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_

#include <boost/multiprecision/gmp.hpp>
#include <boost/multiprecision/random.hpp>
#include <iostream>
#include <iomanip>

void t1()
{
   //[random_eg1
   //=#include <boost/multiprecision/gmp.hpp>
   //=#include <boost/multiprecision/random.hpp>

   using namespace boost::multiprecision;
   using namespace boost::random;

   //
   // Declare our random number generator type, the underlying generator
   // is the Mersenne twister mt19937 engine, and 256 bits are generated:
   //
   typedef independent_bits_engine<mt19937, 256, mpz_int> generator_type;
   generator_type gen;
   //
   // Generate some values:
   //
   std::cout << std::hex << std::showbase;
   for(unsigned i = 0; i < 10; ++i)
      std::cout << gen() << std::endl;
   //]
}

void t2()
{
   //[random_eg2
   //=#include <boost/multiprecision/gmp.hpp>
   //=#include <boost/multiprecision/random.hpp>

   using namespace boost::multiprecision;
   using namespace boost::random;

   //
   // Generate integers in a given range using uniform_int,
   // the underlying generator is invoked multiple times
   // to generate enough bits:
   //
   mt19937 mt;
   uniform_int_distribution<mpz_int> ui(0, mpz_int(1) << 256);
   //
   // Generate the numbers:
   //
   std::cout << std::hex << std::showbase;
   for(unsigned i = 0; i < 10; ++i)
      std::cout << ui(mt) << std::endl;

   //]
}

void t3()
{
   //[random_eg3
   //=#include <boost/multiprecision/gmp.hpp>
   //=#include <boost/multiprecision/random.hpp>

   using namespace boost::multiprecision;
   using namespace boost::random;
   //
   // We need an underlying generator with at least as many bits as the
   // floating point type to generate numbers in [0, 1) with all the bits
   // in the floating point type randomly filled:
   //
   uniform_01<mpf_float_50> uf;
   independent_bits_engine<mt19937, 50L*1000L/301L, mpz_int> gen;
   //
   // Generate the values:
   //
   std::cout << std::setprecision(50);
   for(unsigned i = 0; i < 20; ++i)
      std::cout << uf(gen) << std::endl;
   //]
}

void t4()
{
   //[random_eg4
   //=#include <boost/multiprecision/gmp.hpp>
   //=#include <boost/multiprecision/random.hpp>

   using namespace boost::multiprecision;
   using namespace boost::random;
   //
   // We can repeat the above example, with other distributions:
   //
   uniform_real_distribution<mpf_float_50> ur(-20, 20);
   gamma_distribution<mpf_float_50> gd(20);
   independent_bits_engine<mt19937, 50L*1000L/301L, mpz_int> gen;
   //
   // Generate some values:
   //
   std::cout << std::setprecision(50);
   for(unsigned i = 0; i < 20; ++i)
      std::cout << ur(gen) << std::endl;
   for(unsigned i = 0; i < 20; ++i)
      std::cout << gd(gen) << std::endl;
   //]
}

int main()
{
   t1();
   t2();
   t3();
   t4();
   return 0;
}