[R] Bug on MWC1019?

From: Guido Montorsi <montorsi_at_polito.it>
Date: Tue 15 Mar 2005 - 02:54:46 EST


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



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Mar 15 03:04:07 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:30:47 EST