------- Comment #6 from jvdelisle at gcc dot gnu dot org  2007-05-30 03:37 
-------
I modified the program given in comment #4 to display the exact values at the
end of the cycle along with the three methods.  Method "a" and method "c" give
identical results.  Method "b" has a different phase and its the end point
sooner.  The exact true value is shown in the fourth column of the output
below.

-- snippet --

             a = 3600.0*real(m)+ 60.0*real(l) + real(k) + 0.001*real(j)
             b = 0.001*real(j) + real(k) + 60.0*real(l) + 3600.0*real(m)
             c = real(3600*m + 60*l + k)
             c = c + real(j)/1000.0

             exact1 = 3600*m + 60*l + k
             exact2 = j
             write(6,100)a, b, c, exact1, exact2
         100 format (3(f11.5,2x),i5,".",i3)

Result:

86399.98438  86399.98438  86399.98438  86399.988
86399.99219  86399.99219  86399.99219  86399.989
86399.99219  86399.99219  86399.99219  86399.990
86399.99219  86399.99219  86399.99219  86399.991
86399.99219  86399.99219  86399.99219  86399.992
86399.99219  86399.99219  86399.99219  86399.993
86399.99219  86399.99219  86399.99219  86399.994
86399.99219  86399.99219  86399.99219  86399.995
86399.99219  86400.00000  86399.99219  86399.996
86400.00000  86400.00000  86400.00000  86399.997
86400.00000  86400.00000  86400.00000  86399.998
86400.00000  86400.00000  86400.00000  86399.999


a and c are actually a little more accurate at the end.  Its also interesting
that this deviation between the methods appears to happen only near the end of
the sequence.  I have visually scanned in quite a few places and all three are
identical until this point.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32057

Reply via email to