Потому что процессоры не могут представлять дробные числа с бесконечной точностью. Про это есть стандарт IEEE 754, и это в принципе нормально (или просто все давно привыкли). Можно повышать точность вычислений, но тогда они будут длиться дольше, и можно округлять результаты.
Из-за представления чисел с плавающей запятой в памяти компьютера, как впрочем уже сказали выше.
Если нужны вычисления с заданной точностью - используйте тип Decimal