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 -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -