c++ - 如何判断二进制数的小数部分翻译的准确性?

标签 c++ algorithm floating-accuracy radix

我有一个十进制数。键入双。我用循环的小数部分翻译它,它看起来像这样:

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;

事实证明,我发现元素的数量等于 ACCURACY。我如何计算每个数字唯一的准确度数?然后是额外的零或割礼二进制数。

最佳答案

double 的内部表示不是十进制,它已经是二进制,并且由国际标准 IEEE 754 定义。所以 double 是 64 位的,由3 部分:符号(1 位)、指数(11 位)和尾数(52 位)。

粗略地说,这种分离允许以相同的精度存储非常小和非常大的数字:指数包含有关大小的信息,有效数字存储实际值。

这就是为什么我们立即看到您的程序的问题:首先您只取小数部分,这里丢失了一些信息并且您不知道丢失了多少。然后你尝试做某种转换 a-la “分而治之”,但问题是规模:如果你把区间 [0, 1] 分成两个相等的部分 [0, 0.5) 和 [0.5, 1] ,其中第一个数字会更多。

开始的一个好点可能是这个 article (它是俄语),或英语维基百科 article on double-precision numbers .了解内部表示后,您可能能够通过简单的逻辑操作(如 &>>>)提取所需的位。如果您需要用于十进制到二进制转换的生产质量代码,我会推荐这个库:https://github.com/floitsch/double-conversion .

关于c++ - 如何判断二进制数的小数部分翻译的准确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292068/

相关文章:

arrays - 在具有重复项的排序数组中查找 A[i]=i

C++类静态成员初始化

c++ - 在可移植应用程序中使用 Windows DLL

java - 连接 4 检查获胜算法

math - float 学有问题吗?

floating-point - 点积的最坏情况精度是多少?

math - float 学有问题吗?

c++ - 字符数组和 if 语句语法

c++ - 所有shared_ptr都引用我的 vector 中的同一个指针

C - 二叉搜索树的初始插入为 NULL