http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48979
Summary: FRACTION und EXPONENT return invalid results for infinity/NaN Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: thenl...@users.sourceforge.net program test_fractnan real, parameter :: pinfp = transfer(z'7F800000', 0.0) real, parameter :: ninfp = transfer(z'FF800000', 0.0) real, parameter :: nanp = transfer(z'7FD00000', 0.0) real, parameter :: zerop = 0.0 real :: nan = nanp, pinf = pinfp, ninf = ninfp, zero = zerop print 100, zero, zero, fraction(zero), fraction(zero), exponent(zero) print 100, zerop, zerop, fraction(zerop), fraction(zerop), exponent(zerop) print 100, nan, nan, fraction(nan), fraction(nan), exponent(nan) print 100, nanp, nanp, fraction(nanp), fraction(nanp), exponent(nanp) print 100, ninf, ninf, fraction(ninf), fraction(ninf), exponent(ninf) print 100, ninfp, ninfp, fraction(ninfp), fraction(ninfp), exponent(ninfp) print 100, pinf, pinf, fraction(pinf), fraction(pinf), exponent(pinf) print 100, pinfp, pinfp, fraction(pinfp), fraction(pinfp), exponent(pinfp) 100 format (f10.5,1x,z8,1x,f10.5,1x,z8,1x,i11) end program test_fractnan Result: 0.00000 0 0.00000 0 0 0.00000 0 0.00000 0 0 NaN 7FD00000 NaN 7FD00000 0 NaN 7FD00000 0.00000 0 0 -Infinity FF800000 -Infinity FF800000 0 -Infinity FF800000 NaN 7FC00000 -2147483645 Infinity 7F800000 Infinity 7F800000 0 Infinity 7F800000 NaN 7FC00000 -2147483645 Expected result (-std=f2003): 0.00000 0 0.00000 0 0 0.00000 0 0.00000 0 0 NaN 7FD00000 NaN 7FD00000 2147483647 NaN 7FD00000 NaN 7FD00000 2147483647 -Infinity FF800000 -Infinity FF800000 2147483647 -Infinity FF800000 -Infinity FF800000 2147483647 Infinity 7F800000 Infinity 7F800000 2147483647 Infinity 7F800000 Infinity 7F800000 2147483647 Expected result (-std=f2008): 0.00000 0 0.00000 0 0 0.00000 0 0.00000 0 0 NaN 7FD00000 NaN 7FD00000 2147483647 NaN 7FD00000 NaN 7FD00000 2147483647 -Infinity FF800000 NaN 7FC00000 2147483647 -Infinity FF800000 NaN 7FC00000 2147483647 Infinity 7F800000 NaN 7FC00000 2147483647 Infinity 7F800000 NaN 7FC00000 2147483647 EXPONENT(X) Fortran 2003/2008: If X is an IEEE infinity or NaN, the result has the value HUGE (0). FRACTION(X) Fortran 2003: If X is an IEEE infinity, the result is that infinity. If X is an IEEE NaN, the result is that NaN. Fortran 2008: If X is an IEEE NaN, the result is that NaN. If X is an IEEE infinity, the result is an IEEE NaN. Bug 1: The program does not compile without -fno-range-check. Bug 2: Different results are returned for a variables with values of NaN/Infinity and compile-time constants NaN/Infinity. Bug 3: EXPONENT should be HUGE(0)=2147483647 for NaN/Infinity.