On Tue, 2012-03-13 at 09:21 -0700, W.J. Metzger wrote:
> On Tue, 13 Mar 2012, Cyber Joy wrote:
>
> > Why does this happen?
> >
>
> Dear Cyber Joy,
>
> I guess your question is why you get 12 13 12 rather than 13 13 12.
>
> Try the attached file. If you don't know what the epsilon function is, look it up, e.g.,
>
> http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gfortran/EPSILON.html
>
> You will see that 1d-16 is too small to be added to 12. In other words adding 1d-16 is equivalent to adding zero.
>
> Cheers, Wes
>
> P.S. from your 'name' I would have thought you would have had more fun figuring this out yourself rather than asking the list.
Try this. Maybe it will illuminate. As several have pointed out,
floating-point isn't the same as integer, binary isn't the same as
decimal, and fixed precision isn't the same as unlimited precision.
program test
print *, int(4.8d0/0.4d0+1.0d-16)+1, nint(4.8d0/0.4d0+1.0d-16)+1
print *, int(4.8d0/0.4d0+1.0d-5)+1, nint(4.8d0/0.4d0+1.0d-5)+1
print *, int(4.8d0/0.4d0)+1, nint(4.8d0/0.4d0)+1
end program test
|