1! Test that NINT gives right results even in corner cases 2! 3! PR 31202 4! http://gcc.gnu.org/ml/fortran/2005-04/msg00139.html 5! 6! { dg-do run } 7! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix* *-*-mingw* } { "-O0" } { "" } } 8 real(kind=8) :: a 9 integer(kind=8) :: i1, i2 10 real :: b 11 integer :: j1, j2 12 13 a = nearest(0.5_8,-1.0_8) 14 i2 = nint(nearest(0.5_8,-1.0_8)) 15 i1 = nint(a) 16 if (i1 /= 0 .or. i2 /= 0) STOP 1 17 18 a = 0.5_8 19 i2 = nint(0.5_8) 20 i1 = nint(a) 21 if (i1 /= 1 .or. i2 /= 1) STOP 2 22 23 a = nearest(0.5_8,1.0_8) 24 i2 = nint(nearest(0.5_8,1.0_8)) 25 i1 = nint(a) 26 if (i1 /= 1 .or. i2 /= 1) STOP 3 27 28 b = nearest(0.5,-1.0) 29 j2 = nint(nearest(0.5,-1.0)) 30 j1 = nint(b) 31 if (j1 /= 0 .or. j2 /= 0) STOP 4 32 33 b = 0.5 34 j2 = nint(0.5) 35 j1 = nint(b) 36 if (j1 /= 1 .or. j2 /= 1) STOP 5 37 38 b = nearest(0.5,1.0) 39 j2 = nint(nearest(0.5,1.0)) 40 j1 = nint(b) 41 if (j1 /= 1 .or. j2 /= 1) STOP 6 42 43 a = 4503599627370497.0_8 44 i1 = nint(a,kind=8) 45 i2 = nint(4503599627370497.0_8,kind=8) 46 if (i1 /= i2 .or. i1 /= 4503599627370497_8) STOP 7 47 48 a = -4503599627370497.0_8 49 i1 = nint(a,kind=8) 50 i2 = nint(-4503599627370497.0_8,kind=8) 51 if (i1 /= i2 .or. i1 /= -4503599627370497_8) STOP 8 52 end 53