[gmx-developers] integer overflow in force.c:calc_avcsix

David spoel at xray.bmc.uu.se
Mon Aug 4 19:08:03 CEST 2003


On Mon, 2003-08-04 at 19:01, Gerald Mathias wrote:
> Dear all,
> 
> I just came across a bug in 'calc_avcsix'  in
> 'src/mdlib/force.c' (gmx-version 3.1.4).
> The routine calculates the average C6 constant
> for the long-range dispersion correction to energy and pressure.
> 
> The line 433
> 
>   csix /= (natoms*natoms);
> 
> causes an integer overflow  with a compiler that uses four byte integers 
> (as most do)  for
> 
>   natoms > SQRT(2^31)  = 46,341   
> 
> as the product of integers 'natoms*natoms'
> is calculated before the cast to double is performed.
> Thus, natoms should be casted to double beforehand.
Yes, this bug has been fixed in CVS already,  thanks for reporting it.


> The effect might not be too obvious in inhomogeneous systems,
> as 'natoms*natoms' can still hold a rather large (tough undefined) number.
> However, in a simulation of a large water box I was running, I had a factor
> of ten in the dispersion energy and  an increase of  6% of the density.
> 
> Best regards,
> 
> Gerald
-- 
Groeten, David.
________________________________________________________________________
Dr. David van der Spoel, 	Dept. of Cell and Molecular Biology
Husargatan 3, Box 596,  	75124 Uppsala, Sweden
phone:	46 18 471 4205		fax: 46 18 511 755
spoel at xray.bmc.uu.se	spoel at gromacs.org   http://xray.bmc.uu.se/~spoel
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



More information about the gromacs.org_gmx-developers mailing list