如何在算术编码中将双精度转换为其二进制形式?
How to convert a double to its' binary form in Arithmetic Coding?
我现在正在做算术编码,我已经得到了最终的起始位置和距离,然后我将它们相加。如何将结果转换为二进制模式?
例如,如何在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;
}
算术编码是使用整数数据类型完成的,以提高效率和可预测性。 使用浮点类型没有优点,只有缺点。 您可以简单地将 n 位的整数视为 n 位分数。 当您从顶部取下位时,您可以重新规范化分数以使用这些位。
请参阅算术编码的实际实现和算术编码简介 - 理论与实践。
将任何内容转换为二进制意味着找出涉及 2 的每种幂的多少。在十进制数的情况下,所涉及的幂为负数。
对于.125
,序列是这样的:
.125 x 2 = .250 (< 1)
.250 x 2 = .500 (< 1)
.500 x 2 = 1.000 (>= 1)
.000 = 0 done
因此,二进制表示形式0
x 2^-1
+ 0
x 2^-2
+ 1
x 2^-3
= .001
二进制。作为练习,将此技术与将普通整数转换为二进制表示形式进行对比。
正如正则小数可以具有非终止模式(如 1/3 或 pi/4)一样,二进制表示也会发生同样的情况。在这些情况下,您必须在达到所需的精度时停止计算。
你应该调查IEEE 754
这是浮点格式二进制表示的标准,包括单精度和双精度
相关文章:
- visual在c++中将十进制数转换为二进制数
- C++十进制到二进制,如何转换
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- C++从二进制转换为十进制数
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 如何在 O(n) 中将二进制和转换为二进制
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 十进制到二进制转换器 c++
- 在C++中将结构转换和存储为二进制
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 如何将二进制文件头示例代码 (C++/C#) 转换为 Python?
- 二进制 '==':未找到采用 'Enemy' 类型左侧操作数的运算符(或者没有可接受的转换)
- 将二进制转换为十进制,我如何要求用户仅输入二进制
- QTextStream的操作数到二进制的转换无效
- 在c++中读取和转换二进制数据
- c++转换二进制到十进制从字符串输入
- 计算器转换二进制到浮点值-我做错了什么