外观
小数与进制表示
约 785 字大约 3 分钟
2025-12-26
为什么小数比整数麻烦
在前面的文章中, 无论是进制的理解还是进制转换, 整数部分都显得非常听话.
但一旦涉及小数, 情况就立刻变得复杂起来:
- 有的小数可以被精确转换.
- 有的小数却会无限延伸, 永远无法结束.
这并不是计算方法的问题, 而是进制表示本身的数学特性.
小数是否能被精确表示, 取决于进制和分母的关系.
一个直觉例子: 十进制也不完美
我们常常觉得十进制很自然, 但它同样存在无法精确表示的小数.
例如:
1÷3=0.333333⋯
这个结果在十进制中是一个无限循环小数.
但这并不妨碍我们使用十进制, 只是说明:
任何进制, 都只能精确表示一部分小数.
小数在进制中的本质
一个小数, 本质上是一个分数.
例如:
- 0.5 = 21
- 0.25 = 41
- 0.1 = 101
关键问题在于:
分母能否被目标进制的基数整除
为什么有些小数能被精确表示
二进制中的情况
二进制的基数是 2.
因此, 凡是分母只包含2 的因子的分数, 都可以在二进制中被精确表示.
例如:
- 21→0.12
- 41→0.012
- 81→0.0012
示例:
0.12510=81=0.0012
十进制中的情况
十进制的基数是10=2×5.
因此, 凡是分母只包含2 和 5 的因子的分数, 都可以在十进制中被精确表示.
例如:
- 21
- 41
- 51
- 101
这正是为什么:
- 0.110可以精确表示
- 3110却不行
为什么 0.1 在二进制中转不完
我们常见的例子:
0.110
将其写成分数:
101=2×51
由于分母中包含5, 而二进制的基数只有2, 因此:
0.1 在二进制中只能表示为无限循环小数
这并不是精度不够, 而是根本无法精确表示.
乘基取整法为什么会无限继续
在第二篇中, 我们使用了乘基取整法来转换小数.
当小数可以被精确表示时:
- 乘积的小数部分最终会变为 0.
而当小数无法被精确表示时:
- 小数部分会不断重复.
- 转换过程理论上永远不会结束.
因此, 在实际工程中:
小数转换通常只保留有限精度.
这与浮点数有什么关系
计算机中的浮点数, 本质上也是用二进制来表示小数.
因此:
- 许多看似简单的十进制小数.
- 在计算机中只能被近似表示.
这正是浮点误差产生的根本原因之一.
问题不在于计算机不精确, 而在于表示本身存在极限.
版权所有
版权归属:洱海