如何确定二进制数的小数部分的平移准确性
How to determine the accuracy of the translation of the fractional part of a binary number?
我在十进制系统中有一个数字。双倍型。我使用周期的小数部分来翻译它的赔率,它看起来像这样:
double part;
part = part - int(part);
for (auto i = 0; i < ACCURACY; i++) //Точность
{
part *= typeEncode;
result += std::to_string(int(part));
if (part >= typeEncode / 2)
{
part -= int(part);
}
}
我转移这样的号码:
double E1 = 0.15625;
事实证明,我发现元素的数量等于准确性。如何计算每个数字唯一的精度数?然后是额外的零或包皮环切术二进制数。
double
的内部表示不是十进制的,它已经是二进制的,并且由国际标准IEEE 754定义。所以double
是 64 位的,由 3 部分组成:符号(1 位)、指数(11 位)和有效数(52 位)。
粗略地说,这种分离允许以相同的精度存储非常小和非常大的数字:指数包含有关大小和有效值的信息,并存储实际值。
这就是为什么我们立即看到您的程序的问题:首先您只取小部分,这里丢失了一些信息,您不知道丢失了多少信息。然后你尝试进行某种转换 a-la "分而治之",但问题是尺度:如果你将区间 [0, 1] 分成两个相等的部分 [0, 0.5) 和 [0.5, 1],第一个会有更多的数字。
一个好的起点可能是这篇文章(它是俄语的),或者英语维基百科关于双精度数字的文章。了解内部表示后,您可能能够通过简单的逻辑操作(如&
和>>
)提取所需的位。如果您需要生产质量的代码进行十进制到二进制的转换,我会推荐这个库:https://github.com/floitsch/double-conversion。
相关文章:
- C++将浮点指针值舍入为小数位数
- 从给定的 I 和 D 序列中形成最小数
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 如何在MNIST上提高网络运行的准确性
- 如何将部分流作为参数传递
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 计算 PI 最多 42 位小数
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- 返回浮点数的小数位数
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- 在数学上将浮点数四舍五入到 N 位小数
- 打印双精度的整个非小数部分
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 如何在C++中对OpenCV垫的小数进行四舍五入?
- 如何删除部分类?
- 将 int 数组转换为带有小数C++的双精度数组
- Arduino如何制作返回固定大小数组的函数
- 如何确定二进制数的小数部分的平移准确性
- 如何在c++中存储纬度的小数部分为4 unsigned char