ГОСТ Р 53556.11—2014
unsigned long range, target, symbol;
range = high - low + 1;
target = (((value - low + 1^ « FREQ_BITS) - 1) / range:
symbol = 0;
while (s_freq [(symbol*-1) « delta] > target)
symbol ++;
high=low+((rangc’s_freq[symbol«delta)-(1«FREQ_BITS))»FREQ_BITS):
low =low+((range’s_freq[(symbol+1)«delta))»FREQ_BITS):
for ( : : ) {
if (high < HALF) ;
else if (low >= HALF) {
value -= HALF;
low -H ALF:
high -= HALF:
} else if (low >- FIRST_QTR && high < THIRD_QTR) {
value -= FIRST_QTR:
low ■=FIRST QTR:
high -= FIRST_QTR;
} else
break:
low = 2 *tow.
Л/дЛ = 2* 1;
i/a/ue = 2 * va/ue +get_bit ():
}
return symbol:}
//Finish decoding:
void bgmc_finish_decoding ()
{
scroll_bitstream_position_back(VALUE_BITS-2):
}
Совокупные таблицы частот (массивы s_freq []), используемые вышеприведенными алгоритмами
для кодировамияУдекодирования остаточных MSB. перечисляются ниже. Соответствующая (в пределах
каждого подблока) таблица выбирается, используя параметр sx.
45