レンジ符号
前と同じ手法を使用して、下限と上限の間の範囲を分割すると、3つの部分範囲は次のようになる。
<EOM>はメッセージの終わりの記号なので、最終的な範囲は [25056, 25920) である。"251" で始まる5桁の整数はすべて最終的な範囲に入るため、元のメッセージを明確に伝える3桁の接頭辞の1つである(実際には、このようなプレフィックスが8つもあるということは、非効率性があることを意味する。これは、基数2ではなく基数10を使用したために起こったものである)。
中心的な問題は、符号化しなければならないシンボルの数にかかわらず、ゼロ以外の部分範囲に分割するのに十分な大きさの現在の範囲を常に持つために、十分に大きな範囲の初期範囲を選択しているように見えることである。しかし、実際には、これは問題ではない。非常に大きな範囲から始めて徐々に狭くするのではなく、任意の時点でより小さな範囲の数値で動作するためである。いくつかの桁数が符号化された後、左端の桁は変更されない。3つのシンボルだけを符号化した後の例では、我々は最終結果が "2" で始まることを既に知っていた。左側の数字が送信されると、右側の数字がより多くシフトされる。これは次のコードで説明されている。
終了するには、いくつかの桁を追加する必要がある。low の最上位はおそらく小さすぎるので、それを増やす必要があるが、low+range は増やさないようにする必要がある。最初に、range が十分に大きいことを確認する必要がある。