Пример #1
0
double *SampleGauss(gauss_t *mp)
{
    int i,j;
    double *v,*aux;

    nonull(v=malloc(mp->dim*sizeof(double)));
    nonull(aux=malloc(mp->dim*sizeof(double)));
    for (i=0; i<mp->dim; i++) aux[i]=BoxMuller();
    for (i=0; i<mp->dim; i++) v[i]=mp->mean[i];
    if (mp->type==DIAG)
        for (i=0; i<mp->dim; i++) v[i]+=mp->dCholesky[i]*aux[i];
    else {
        for (i=0; i<mp->dim; i++)
            for (j=0; j<=i; j++)
                v[i]+=mp->Cholesky[i][j]*aux[j];
    }
    free(aux);
    return v;
}
extern "C" void BoxMullerRef(float *h_Random, int NPerRng){
    int i;

    for(i = 0; i < MT_RNG_COUNT * NPerRng; i += 2)
        BoxMuller(h_Random[i + 0], h_Random[i + 1]);
}
Пример #3
0
double RNG::nextGaussian() {
    return BoxMuller(nextUnif(), nextUnif());
}