I have this simple C++ program with unexpected output:
#include<random>
#include<iostream>
#include "boost/random/mersenne_twister.hpp"
#include "boost/random/uniform_int_distribution.hpp"
int main(){
std::cout << sizeof(std::mt19937) << std::endl;
std::cout << sizeof(std::mt19937_64) << std::endl;
std::cout << sizeof(boost::random::mt19937) << std::endl;
std::cout << sizeof(boost::random::mt19937_64) << std::endl;
}
5000
2504
2504
2504
What I find interesting is that sizeof standard implementation of mt19937(32bit one) is around 2x the the boost version, while 64bit ones match perfectly.
Since MT uses a lot of space it is not really a small difference.
Also it is weird that implementation of a strictly specified algorithm would have such different sizeof, we are not talking about std::string where implementers might pick different SSO buffer size...
My best guess would be that boost either has a bug or that it implements some slightly different version of mt19937, but wikipedia says this, suggesting boost might be right:
Relatively large state buffer, of 2.5 KiB,
edit: both boost and std version seem to satisfy requirement that 1000th generated value is 4123659995, so there seems to be no bug in boost.
Aucun commentaire:
Enregistrer un commentaire