В кодировщике диапазона с использованием арифметики с конечной точностью могут быть случаи, когда невозможно кодировать следующий символ без предварительного применения какого-либо флеша или настройки, чтобы открыть пространство в рабочие регистры.Дальномерное кодирование без двусмысленного или незаконного выхода
Следствием этого является то, что в зависимости от того, как все изменилось, в наборе законных битовых потоков может быть оставлен небольшой промежуток.
Например, Wikipedia page предлагает сузить диапазон выходного сигнала до того, что позволяет вывести больше битов, оставив некоторую часть исходного диапазона неопределенной.
В декодере можно прийти к той же точке, а затем обнаружить, что входной поток битов сам по себе не соответствует настройке энкодера, а вместо этого переходит в зазор, который должен был быть отброшен кодером. Нет правильного декодирования такого битового потока.
Контрастируйте это с чем-то вроде Хаффмана, который обычно определяется без какой-либо неоднозначной конфигурации ввода (за исключением конца потока, где может быть неполный символ). Таким образом, можно декодировать произвольный бит-поток в сообщение, которое затем может быть перекодировано в исходный поток битов.
Мой вопрос заключается в следующем: возможно ли сформулировать какую-то настройку, которая касается пределов точности, но не создает возможности недоказуемого или неоднозначного битового потока? Такой, что при произвольном битовом потоке всегда можно декодировать его до некоторого набора символов, который может быть повторно закодирован обратно в исходный бит-поток?
Интуитивно кажется, что это должно быть невозможно, и я не должен биться головой об этой проблеме; но я смотрю на Хаффмана и рассуждает, что у него есть свойство, которое я смогу смоделировать.
Название свойства, которое вы описываете, является «биективным». Таким образом, вы можете искать литературу для «биективного» и «кодирования диапазона». Возможно, кто-то уже решил это. –
@MarkAdler, это обязательно работает. Похоже, что основная проблема связана с EOF (поскольку EOF в середине вашего файла создает произвольное количество избыточных потоков). Популярное не-fudge решение представляется произвольной точностью с использованием схемы отложенного переноса вывода. – sh1