Почему десятичные числа не могут быть представлены точно в двоичном формате?

В SO было опубликовано несколько вопросов о представлении с плавающей точкой. Например, десятичное число 0,1 не имеет точного двоичного представления, поэтому опасно использовать оператор == для сравнения его с другим числом с плавающей запятой. Я понимаю принципы, лежащие в основе представления с плавающей точкой.

Что я не понимаю, так это то, почему с математической точки зрения числа, расположенные справа от десятичной запятой, являются более "особыми". что слева?

Например, число 61.0 имеет точное двоичное представление, потому что целая часть любого числа всегда точна. Но число 6.10 не является точным. Все, что я сделал, это переместил десятичное число на одно место, и внезапно я ушел из Экзактопии в Инэктактвиль. Математически между этими двумя числами не должно быть внутренней разницы - они просто числа.

Напротив, если я перемещу десятичное число на одно место в другом направлении, чтобы получить число 610, я все еще нахожусь в Exactopia. Я могу продолжать двигаться в этом направлении (6100, 610000000, 610000000000000), и они все еще точны, точны, точны. Но как только десятичное число пересекает некоторый порог, числа перестают быть точными.

Что происходит?

Изменить: чтобы уточнить, я хочу держаться подальше от обсуждения стандартных представлений, таких как IEEE, и придерживаться того, что я считаю математически "чисто" путь. В базе 10 позиционные значения:

... 1000  100   10    1   1/10  1/100 ...

В двоичном виде они будут:

... 8    4    2    1    1/2  1/4  1/8 ...

Также нет произвольных ограничений на эти числа. Позиции увеличиваются до бесконечности влево и вправо.

Ответы на вопрос(20)

Ваш ответ на вопрос