2

現在、算術符号化を行っており、最終的な開始位置と距離を取得してから、それらを追加します。結果をバイナリモードに変換するにはどうすればよいですか?

たとえば、C ++でどのよう0.125 decimalに変換できますか?0.001 binary

void CArithmeticCoding::Encode()
{
    if ( 0 == m_input )
        return;
    printf("The input is [%s].\n", this->m_input);

    while (*m_input)
    {
        if ( *m_input == m_MPS )
        {
            DOMPS();
        }
        else
        {
            DOLPS();
        }
        ++m_input;
    }
    double ret = m_start + m_dis;

    return;
}
4

3 に答える 3

3

算術符号化は、効率と予測可能性のために整数データ型で行われます。浮動小数点型を使用することには、長所はなく、短所だけがあります。単純に、nビットの整数をnビットの小数部と見なすことができます。ビットを上から外すと、それらのビットを使用するように分数を再正規化します。

算術符号化の実用的な実装、および算術符号化概要-理論と実践を参照してください。

于 2012-06-12T14:33:57.613 に答える
2

何かを2進数に変換するということは、2の各種類の累乗がいくつ含まれているかを調べることを意味します。10進数の場合、関係する累乗は負です。

の場合.125、シーケンスは次のようになります。

.125 x 2 =  .250 (< 1)
.250 x 2 =  .500 (< 1)
.500 x 2 = 1.000 (>= 1)
.000     = 0     done

したがって、バイナリ表現は0x 2^-1+ 0x 2^-2+ 1x 2^-3=.001バイナリです。演習として、この手法を通常の整数を2進表現に変換する手法と比較してください。

通常の小数が非終了パターン(1/3やpi / 4など)を持つことができるのと同じように、同じことがバイナリ表現でも発生する可能性があります。そのような場合は、希望の精度に達したときに計算を停止する必要があります。

于 2012-06-12T08:26:17.597 に答える
1

IEEE754を調査する必要があります

これは、単精度と倍精度の両方の浮動小数点形式のバイナリ表現の標準です。

于 2012-06-12T08:30:37.503 に答える