Using
std::mt19937::result_type(std::chrono::system_clock::now().time_since_epoch().count());
as seed looks nice and 'portable', assuming C++11.
No need to build Boost.Chrono library - the disadvantage that I was trying to avoid.
But using random_device looks even simpler, again assuming Standard C++11.
using std::random_device;
random_device seeder;
static std::mt19937 generator(seeder());
std::mt19937::result_type result = generator();
std::cout << "random generated is " << result << std::endl; // 4033698283 3116091012 ... different each run.
And showing a little more info
using std::random_device;
random_device seeder;
std::mt19937::result_type seed = seeder();
std::cout << "seed from seeder() is " << seed << std::endl;
static std::mt19937 generator(seed);
std::mt19937::result_type result = generator();
std::cout << "random generated is " << result << std::endl; // 4033698283 3116091012 ... different each run.
std::mt19937::result_type is j
std::is_same
-----Original Message----- From: Boost
On Behalf Of Christopher Kormanyos via Boost Sent: 20 June 2020 11:41 To: Paul A Bristow via Boost Cc: Christopher Kormanyos Subject: Re: [boost] Boost.Random So would following the crowd and using time(0)> be simplest? I never liked time(0) for that particular use casebecause in the old days it had multiple millisecondresolution and lacked the seed resolution sometimes. I do not know it the code below is best practice,but I usually use some kind of variation of below.You can switch system_clock for high_resolution_clock. All this is straight off-the-rack C++11.
#include <chrono> #include <iostream> #include <random>
// Use time point now seed to get a different set of values each time. const std::mt19937::result_type seed = std::mt19937::result_type(std::chrono::system_clock::now().time_since_epoch().count());
// uint32_t static std::mt19937 gen(seed);
int main() { std::cout << gen() << std::endl; }
On Thursday, June 18, 2020, 10:27:27 AM GMT+2, Paul A Bristow via Boost
wrote: -----Original Message----- From: Boost
On Behalf Of John Maddock via Boost Sent: 17 June 2020 18:48 To: Paul A Bristow via Boost Cc: John Maddock Subject: Re: [boost] Boost.Random I have wanted to use boost::random::random_device; as a seeder for my generator.
#include
// For boost::random::random_device; seeder But using this requires that I link to a library file // LINK : fatal error LNK1104: cannot open file 'libboost_random-vc142-mt-gd-x64-1_73.lib'
So I have instead used C++ std random device successfully
using std::random_device; random_device seeder; // Use seeder to get a different set of values each time. static boost::random::mt19937 gen(seeder()); // uint32_t
But is there any way I can stick to the Boost version (I imagine that it might prove more
On 17/06/2020 15:53, Paul A Bristow via Boost wrote: portable?
Or is this a delusion?)
What do you mean by portable? random_device is inherently non-portable because it's.... random ;)
By portable I mean 'works on as many platforms and C++ standard versions as possible'.
In many ways this is something that the std:: version does best as the system implementer knows best how to implement on their OS. Or you could just link to Boost.Random of course which would work nearly everywhere too I'm sure.
I was just puzzled why Boost.Random needed to *link* when std:random_device doesn't appear to. Is it quietly linking to a standard library?
Paul
PS Thanks for the even-more-random suggestions but I really, really don't care how randomly random it is for my application.
So would following the crowd and using time(0) be simplest?
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost