bug in NINT() in gfortran
Tim Prince
n8tm@aol.com
Sat Jun 12 13:51:00 GMT 2010
On 6/12/2010 12:07 AM, Hans Jørgen Aagaard Jensen wrote:
> The NINT() intrinsic in current gfortran under cygwin has a bug. Below follows:
> 1) small test program
> 2) output from this program
> 3) output from "gfortran -v"
>
> (I am not submitting this to the gcc bugzilla, because the test worked OK on all the linux systems I tested.)
> (I found the error becaus our quantum chemistry softward dirac (http://dirac.chem.sdu.dk) failed a few of the internal tests.)
>
> -- Hans Jørgen Aa. Jensen
>
> ======= 1) small test program ============
> program test
> double precision xval
> xval = 132843.61283756854D0
> do i = 1,7
> ipoint = nint(xval)
> write (6,*), xval, ipoint
> xval = 10.0d0*xval
> end do
> return
> end
> ======= 1) output =============
> 132843.61283756854 132844
> 1328436.1283756853 -1596096578
>
>
Try the following replacement for nint():
ipoint = xval+.5
which leads me to believe the lround function from newlib is buggy.
If you wished to handle negative as well as positive, the work-around
ipoint = xval+sign(.5,xval)
would take it a little further. This short-cuts the distinction between
ieee_nearest and legacy Fortran rounding style, but I don't see that
gfortran was making the distinction.
--
Tim Prince
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin
mailing list