C++ 如何将double转换为其';算术编码中的二进制形式?

C++ 如何将double转换为其';算术编码中的二进制形式?,c++,math,compression,C++,Math,Compression,我现在正在做算术编码,我得到了最终的起始位置和距离,然后我把它们加起来。 如何将结果转换为二进制模式 例如,在C++中,如何将 0.125十进制< /代码>转换为 0.001二进制< /代码>? void CArithmeticCoding::Encode() { if ( 0 == m_input ) return; printf("The input is [%s].\n", this->m_input); while (*m_input)

我现在正在做算术编码,我得到了最终的起始位置和距离,然后我把它们加起来。 如何将结果转换为二进制模式

例如,在C++中,如何将<代码> 0.125十进制< /代码>转换为<代码> 0.001二进制< /代码>?
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;
}

将任何东西转换成二进制意味着找出2的每种幂的数量。对于十进制数,所涉及的幂是负数

对于
.125
,顺序如下:

.125 x 2 =  .250 (< 1)
.250 x 2 =  .500 (< 1)
.500 x 2 = 1.000 (>= 1)
.000     = 0     done
.125 x 2=.250(<1)
.250 x 2=.500(<1)
.500 x 2=1.000(>=1)
.000=0完成
因此,二进制表示是
0
x
2^-1
+
0
x
2^-2
+
1
x
2^-3
=
.001
二进制。作为练习,将此技术与将普通整数转换为二进制表示法进行对比

正如正则小数可以具有非终止模式(如1/3或pi/4),二进制表示也可以具有相同的模式。在这种情况下,当达到所需精度时,您必须停止计算。

您应该进行调查


这是浮点格式二进制表示的标准,单精度和双精度算术编码均使用整数数据类型进行,以提高效率和可预测性。使用浮点类型既没有优点,也只有缺点。你可以简单地认为N比特的整数是N比特分数。当你从顶部取位时,你重新规范化分数以使用这些位


请参见和。

作为练习,尝试转换1/3;)没问题。除此之外,如果您刚才想搜索什么,还有很多IEEE 754的示例实现;