static unsign32 sbrand()

in src/rand.c [33:55]


static unsign32 sbrand(csprng *rng)
{
    /* Marsaglia & Zaman random number generator */
    int i;
    int k;
    unsign32 pdiff;
    unsign32 t;
    rng->rndptr++;
    if (rng->rndptr<NK) return rng->ira[rng->rndptr];
    rng->rndptr=0;
    for (i=0,k=NK-NJ; i<NK; i++,k++)
    {
        /* calculate next NK values */
        if (k==NK) k=0;
        t=rng->ira[k];
        pdiff=t - rng->ira[i] - rng->borrow;

        if (pdiff<t) rng->borrow=0;
        if (pdiff>t) rng->borrow=1;
        rng->ira[i]=pdiff;
    }
    return rng->ira[0];
}