When numbers are read from a file or appear as literals in your
program, they are converted from their textual
representation—which is always in base 10 for numbers with
decimal points in them—into an internal, base-2 representation.
The only fractional numbers that can be exactly represented using a
finite number of digits in a particular numeric base are those that
can be written as the sum of a finite number of fractions whose
denominators are integral powers of that base.
For example, 0.13 is one tenth plus three one-hundredths. But that's
in base-10 notation. In binary, something like 0.75 is exactly
representable because it's the sum of one half plus one quarter, and
2 and 4 are both powers of two. But even so simple a number as one
tenth, written as 0.1 in base-10 notation, cannot be rewritten as the
sum of some set of halves, quarters, eighths, sixteenths, etc. That
means that, just as one third can't be exactly represented as a
non-repeating decimal number, one tenth can't be exactly represented
as a non-repeating binary number. Your computer's internal binary
representation of 0.1 isn't exactly 0.1; it's just an approximation!
$ perl -e 'printf "%.60f\n", 0.1'
0.100000000000000005551115123125782702118158340454101562500000