Я работаю над оптимизацией реализации арифметического сжатия. Я включил базовый алгоритм арифметического кодирования ниже:
lower bound = 0
upper bound = 1
while there are still symbols to encode
current range = upper bound - lower bound
upper bound = lower bound + (current range × upper bound of new symbol)
lower bound = lower bound + (current range × lower bound of new symbol)
end while
У меня есть идея округлить мои значения, но для этого расчет верхней границы НЕ МОЖЕТ использовать значение нижней границы. Я не могу понять, как это сделать.
Дополнительная информация: я планирую округлить нижнюю границу, сузив диапазон, сохранив таким образом точность, при этом в моем числе будет меньше цифр. Затем таким же образом округляем верхнюю границу ниже. Однако вычисление верхней границы приводит к тому, что она увеличивается, если мы увеличиваем значение нижней границы, что делает алгоритм неверным.
Мой вопрос: как я могу рассчитать верхнюю границу, не используя значение нижней границы?
long
. - person comingstorm   schedule 22.03.2013>>>
для выполнения сдвига, необходимого для арифметического сжатия. - person comingstorm   schedule 22.03.2013<<
. Однако, в зависимости от того, как вы реализуете свою математику, знание о беззнаковом операторе сдвига вправо также может быть полезным... - person comingstorm   schedule 22.03.2013