What is the reason of inaccuracy of operations on float numbers?
It's because 0.1 = 1 / 10 = 1 / (2 &times; 5) cannot be represented exactly in binary floating point.  This happens in C too:

 printf("%.20f", fmod(4.0,0.1));


prints 0.09999999999999978351.

Specifically, the only numbers that binary floating point can represent exactly are dyadic fractions of the form a / 2b, where a and b are integers.  Even more specifically, for IEEE single precision floating point numbers, a must be between -224 and 224 and b must, in effect, be between -151 and 104.  (Or at least approximately so; there are some tricky special cases like denormalized numbers.)  For double precision floats, the ranges are wider, but even so, a fraction like 1 / 10 cannot be represented exactly, because the denominator is not a power of two.