В SO было отправлено несколько вопросов о представлении с плавающей точкой. Например, десятичное число 0,1 не имеет точного двоичного представления, поэтому опасно использовать оператор == для сравнения его с другим числом с плавающей запятой. Я понимаю принципы представления с плавающей запятой.
Я не понимаю, почему с математической точки зрения числа справа от десятичной точки больше "специальные", чем те, что слева?
Например, число 61.0 имеет точное двоичное представление, потому что интегральная часть любого числа всегда точна. Но число 6.10 не является точным. Все, что я сделал, это перемещение десятичного места, и я внезапно перешел из Exactopia в Inexactville. Математически не должно быть внутренней разницы между двумя числами - они просто цифры.
В отличие от этого, если я перемещаю десятичное одно место в другом направлении, чтобы создать номер 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 ...
На этих числах также нет никаких ограничений. Позиции неограниченно увеличиваются влево и вправо.