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

Reply via email to