C++ 如何将double转换为其';算术编码中的二进制形式?
我现在正在做算术编码,我得到了最终的起始位置和距离,然后我把它们加起来。 如何将结果转换为二进制模式 例如,在C++中,如何将<代码> 0.125十进制< /代码>转换为<代码> 0.001二进制< /代码>?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)
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
x2^-1
+0
x2^-2
+1
x2^-3
=.001
二进制。作为练习,将此技术与将普通整数转换为二进制表示法进行对比
正如正则小数可以具有非终止模式(如1/3或pi/4),二进制表示也可以具有相同的模式。在这种情况下,当达到所需精度时,您必须停止计算。您应该进行调查
这是浮点格式二进制表示的标准,单精度和双精度算术编码均使用整数数据类型进行,以提高效率和可预测性。使用浮点类型既没有优点,也只有缺点。你可以简单地认为N比特的整数是N比特分数。当你从顶部取位时,你重新规范化分数以使用这些位
请参见和。作为练习,尝试转换1/3;)没问题。除此之外,如果您刚才想搜索什么,还有很多IEEE 754的示例实现;