fortran90 - Fortran behavior of a tiny program -


i new in fortran90 (30 minutes ago...) , have program:

program example1     implicit none     real (kind=8) :: x,y,z     x = 3.d0     y = 2.d-1     z = x + y      print *, "y = ", y     print *, "x = ", x     print *, "z = ", z  end program example1 

but when run with:

gfortran example1.f90 ./a.out 

the output is:

y =   0.20000000000000001      x =    3.0000000000000000      z =    3.2000000000000002    

why not 3.2000000000000000 ??? doing wrong? why y has 1 in last digit?? , why z has 2 in last digit?? sorry if dumb question, dont understand doing wrong...

thanks!!

there's absolutely nothing wrong program. issue has real's inability represent decimals precisely, without error. problem numbers not composed of negative powers of 2 must represented approximately. that's why there small error in 16-th decimal place. more information representation of reals take @ article on wikipedia. another great article on same subject.

if replace 0.2 0.25, problem go away, because 0.25 2 ^ -2.


Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Socket.connect doesn't throw exception in Android -

iphone - How do I keep MDScrollView from truncating my row headers and making my cells look bad? -