FIX: Incorrect Results with PARAMETER in NINT

ID: Q77341


The information in this article applies to:
  • Microsoft FORTRAN for MS-DOS, versions 5.0, 5.1
  • Microsoft FORTRAN for OS/2, versions 5.0, 5.1


SYMPTOMS

Programs that contain a PARAMETER constant in an arithmatic expression within the NINT intrinsic function argument list may generate incorrect results during run time.


RESOLUTION

One way to work around this problem is to use a variable in the expression instead of a PARAMETER.


STATUS

Microsoft has confirmed this to be a problem in the products listed above. This problem was corrected in FORTRAN PowerStation.


MORE INFORMATION

The following code can be sued to reproduce the problem:

Sample code


        integer*4 iconst
        parameter (iconst = 1024)

        real sdata, ddata

        ddata = 200.0
        sdata = 0.001
c        iconst = 1024

c incorrect results generated here
      print *,  'NINT(ddata * iconst * sdata) * 2 = ',
     * NINT(ddata * iconst * sdata) * 2
      print *,  'NINT(ddata * iconst * 0.001) * 2 = ',
     * NINT(ddata * iconst * 0.001) * 2

      print *,  'NINT(200.0 * iconst * sdata) * 2 = ',
     * NINT(200.0 * iconst * sdata) * 2
      print *,  'NINT(200.0 * iconst * 0.001) * 2 = ',
     * NINT(200.0 * iconst * 0.001) * 2

      print *,  'NINT(ddata    * iconst * sdata) + 2 = ',
     * NINT(ddata * iconst * sdata) + 2
      print *,  'NINT(ddata    * iconst * 0.001) + 2 = ',
     * NINT(ddata * iconst * 0.001) + 2

        END 
Output:

NINT(ddata * iconst * sdata) * 2 =       409  ! this value should be 410
NINT(ddata * iconst * 0.001) * 2 =       410
NINT(200.0 * iconst * sdata) * 2 =       410
NINT(200.0 * iconst * 0.001) * 2 =       410
NINT(ddata * iconst * sdata) + 2 =       207
NINT(ddata * iconst * 0.001) + 2 =       207 

Additional query words: 5.00 5.10 buglist5.00 buglist5.10 fixlist1.00

Keywords :
Version : :5.0,5.1
Platform :
Issue type :


Last Reviewed: November 1, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.