Dear R-developer (Marsaglia??)

The following  piece of code from package SuppDist , routine "dist.cc" seems
to have a bug

ULONG MWC1019(void){
        ULONG long t;
        int     i = endQ-1;

        t = 147669672LL*Q[i] + Q[endQ];
        Q[endQ] = (t>>32);
        if(i>0)
                return(Q[i--] = t);
        i = endQ-1;
        return(Q[0] = t);
}

in fact , being "i" a local variable that have automatic storage, it is
initialized to endQ-1 (1019)
 each time the routine is called so that it can never
cycle through all values as it should.

I think it should be declared as static:

ULONG MWC1019(void){
        ULONG long t;
        static int      i = endQ-1;

        t = 147669672LL*Q[i] + Q[endQ];
        Q[endQ] = (t>>32);
        if(i>0)
                return(Q[i--] = t);
        i = endQ-1;
        return(Q[0] = t);
}

Best regards,

Guido Montorsi

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to