Wpis z mikrobloga

Mam pewien problem. Próbuje porównać sobie działanie funckji do generowania liczb pseudolosowych, korzystając z pakietu GSL. Porównuje dwa algorytmy zwykły rand() i Mersenne Twister. Histogram jaki otrzymuje niestety nie pokazuje znaczących różnic pomiędzy algorytmami, a Mersenne Twister powinien byc wiele lepszy niż rand(). Co zrobić żeby zaprezentowac ta różnice pomiędzy tymi dwoma funkcjami?

Kod który używam do generowania liczb:

double** *RandomNumberGenerator::MersenneTwister(**int** Npairs,**int** trials)
{
**double** *tableOfResults = **new** **double**[Npairs*trials];
**int** j = 0;
**for** (**int** g = 0; g<trials ;g++)
    {
        gsl_rng * r;
        //setting seed
        gslrngenvsetup();
        //setting method
        r = gsl
rngalloc(gslrngmt19937);
        gsl
rngset(r,time(**NULL**));
**int** i = 0;
**for**(i = 0; i<Npairs;i++)
        {
**double** u = gsl
rnguniform(r);// / (double)gslrng_max(r);
            //        u = min + u * (max-min);
            tableOfResults[j]=u;
            //        printf("%.5f\n",u);
            j++;
        }
        gslrngfree(r);
    }
**return** tableOfResults;;
}

Kod: http://pastie.org/10101804 (coś wykop highlighter mi nie działa)
#pseudolosowosc #programowanie #c #jezykc
1608 - Mam pewien problem. Próbuje porównać sobie działanie funckji do generowania li...

źródło: comment_HM1NtuNw1lUB2wp1A7bm4OWNUfJ6OBi7.jpg

Pobierz
  • 4
niestety nie pokazuje znaczących różnic pomiędzy algorytmami, a Mersenne Twister powinien byc wiele lepszy niż rand()


@1608: Lepszy to wcale nie znaczy, że rozkład będzie "bardziej" jednostajny. MT jest lepszy, bo ma np. bardzo długi okres itp. Istnieje zbiór testów do badania jakości generatorów liczb pseudolosowych (http://en.wikipedia.org/wiki/Diehard_tests ), może spróbuj je jakoś wykorzystać, żeby pokazać wyższość MT nad rand - sam histogram różnic znaczących nie pokaże.