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