samedi 4 août 2018

Bug in std::random when generating normal_distribution?

Here is my code. It suppose to generate normal_distribution.

#include <iostream>
#include <random>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/normal_distribution.hpp>


int main(int argc, const char *argv[])
{

    // Initialize seed .
    std::mt19937 gena;
    boost::random::mt19937 genb;
    gena.seed( 10 );
    genb.seed( 10 );

    std::normal_distribution<> norma;
    boost::random::normal_distribution<> normb;

    std::cout << "STD BOOST" << std::endl;
    for (size_t i = 0; i < 20; i++) 
        std::cout << norma(gena) << ' ' << normb(genb) << std::endl;

    return 0;
}

I compile it with gcc-8.1 on arch-linux, and I get the following:

STD BOOST -0.0512656 1.16196 -1.90693 -0.742973 1.23919 -1.10165 -0.212754 1.03149 -0.376303 0.597194 0.0660327 -0.12573 -1.01706 1.10728 0.907624 -0.370934 -0.682124 -0.404068 -0.461218 -0.46376 0.965666 -0.607265 0.560664 -1.44186 0.749932 0.449968 -0.31456 -0.268649 0.366249 0.986499 0.608089 -0.500526 -1.08684 -0.0215645 0.120559 -0.805144 1.40203 0.390409 -0.434259 0.0991071

I use the same code on a Mac machine (Apple LLVM version 7.0.2 (clang-700.1.81)); and I get the following:

STD BOOST -1.90693 1.16196 -0.0512656 -0.742973 -0.212754 -1.10165 1.23919 1.03149 0.0660327 0.597194 -0.376303 -0.12573 0.907624 1.10728 -1.01706 -0.370934 -0.461218 -0.404068 -0.682124 -0.46376 0.560664 -0.607265 0.965666 -1.44186 -0.31456 0.449968 0.749932 -0.268649 0.608089 0.986499 0.366249 -0.500526 0.120559 -0.0215645 -1.08684 -0.805144 -0.434259 0.390409 1.40203 0.0991071

Note the first column which uses std::random is different; but if you look closely, first column have many elements common but seem to be shuffled.

I am worried after one test broke on Travis (that means, Ububtu-14.04 and xcode-9.2 will show the same results) after we replaced our old normal distribution generator in favor of std::random.

Is it a bug? Or I am doing something wrong? BOOST is doing OK.

Aucun commentaire:

Enregistrer un commentaire