Your compiler uses 32 bits real by default.

Try `z1=0.7d0`

to use double precision (64 bits). The last digit may still be false, but it is normal, real numbers are stored with a limited number of bits in your CPU and in binary. And for example `0.7`

has an infinite number of digits in base 2:

`0.7 = 0b0.10110011001100110011001100110011001100110011001101...`

Note also there are better ways to declare real numbers in modern Fortran. See that discussion:

And see also that tool: