Потому что 0.1 это 1/10, а 10 нельзя домножить на целое число, чтобы получилась степень двойки. В то время, как можно домножить, чтобы получилась степень десятки.
Точно также, в десятичной системе счисления ты не сможешь 1/3 записать конечным числом символов в виде десятичной дроби (тройка будет повторяться бесконечно), а вот в троичной системе счисления легко можешь.
В программировании числа с точкой считаются дробью из-за особенностей представления чисел в двоичной системе:
1. В десятичной системе 0.1 = 1/10
В двоичной системе 0.1 = 0.0001100110011... (бесконечная периодическая дробь)
2. Компьютер хранит числа в двоичном виде:
- Целые числа - точно
- Дробные числа - с определенной точностью (32 или 64 бита)
3. При конвертации из десятичной в двоичную систему:
- Некоторые числа становятся периодическими дробями
- Возникают погрешности округления
- Теряется точность представления
4. Поэтому в программировании:
- Числа с точкой считаются дробными
- Используются специальные типы данных (float, double)
- Требуется учитывать погрешности вычислений