IEEE 754 标准中的零点一

zero point one in the IEEE 754 standard

所以,我正在学习 IEEE 754,有一个问题

为什么有些数字(例如数字 0.1 和 0.2)不是值 完全按照 IEEE 754 标准编码?

IEEE-754 指定了二进制和十进制格式。 .1 和 .2 当然可以用十进制表示。

在二进制格式中,每个数字位置对应于 2 的幂。对于位 101.011,位置对应于 4、2、1、½、¼ 和 ⅛。所以 101.011 表示 1•4 + 0•2 + 1•1 + 0•½ + 1•¼ + 1•⅛ = 4 + 1 + ¼ + ⅛ = 5⅜ = 5.375。我们可以通过调整指数来改变二的幂(这是浮点数的“浮动”部分;数字的值乘以二的幂来移动“小数点”的有效位置)。 =10=]

.1 无法表示,因为不存在和为 .1 的有限的 2 的幂集。假设你有两个 p0, p[ 的总和 S =57=]1, p2,…pn,降序排列。由于 pn 是这些幂中最小的,所以其他都是它的倍数。这意味着总和 Spn[= 的倍数之和59=],所以它是pn的倍数。这意味着 S = j / 2k 对于某些整数 jk。如果S = .1,则.1 = j / 2k,所以 2k = 10j,然后 2 k−1 = 5j。但是如果2k−1 = 5j,那么2k−1是五的倍数。这是不可能的,因为它是二的幂。所以 S 不能是 .1.

@Eric 已经解释了基础知识。但是,在使用浮点数时,您还需要注意许多其他问题。

我最近看到这个博客 post 关于这个主题,它有对二进制分数的解释、可能的解决方案如何出错的示例以及包含有关该主题的更多信息的外部链接。

https://www.microforum.cc/blogs/entry/1-floating-point-numbers/