漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3?( 二 )
文章插图
文章插图
十进制转二进制
首先我们看一下 , 如何把十进制整数转换成二进制整数?
十进制整数转换为二进制整数采用"除2取余 , 逆序排列"法 。
具体做法是:
- 用2整除十进制整数 , 可以得到一个商和余数;
- 再用2去除商 , 又会得到一个商和余数 , 如此进行 , 直到商为小于1时为止
- 然后把先得到的余数作为二进制数的低位有效位 , 后得到的余数作为二进制数的高位有效位 , 依次排列起来 。
文章插图
那么 , 十进制小数转换成二进制小数 , 又该如何计算呢?
十进制小数转换成二进制小数采用"乘2取整 , 顺序排列"法 。
具体做法是:* 用2乘十进制小数 , 可以得到积 * 将积的整数部分取出 , 再用2乘余下的小数部分 , 又得到一个积 * 再将积的整数部分取出 , 如此进行 , 直到积中的小数部分为零 , 此时0或1为二进制的最后一位 。 或者达到所要求的精度为止 。
文章插图
所以 , 十进制的0.625对应的二进制就是0.101 。
文章插图
文章插图
文章插图
不是所有数都能用二进制表示
我们知道了如何将一个十进制小数转换成二进制 , 那么是不是计算就可以直接用二进制表示小数了呢?
前面我们的例子中0.625是一个特列 , 那么还是用同样的算法 , 请计算下0.1对应的二进制是多少?
文章插图
我们发现 , 0.1的二进制表示中出现了无限循环的情况 , 也就是(0.1)10 = (0.000110011001100…)2
这种情况 , 计算机就没办法用二进制精确的表示0.1了 。
也就是说 , 对于像0.1这种数字 , 我们是没办法将他转换成一个确定的二进制数的 。
文章插图
文章插图
文章插图
文章插图
文章插图
IEEE 754
为了解决部分小数无法使用二进制精确表示的问题 , 于是就有了IEEE 754规范 。
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准 , 为许多CPU与浮点运算器所采用 。
浮点数和小数并不是完全一样的 , 计算机中小数的表示法 , 其实有定点和浮点两种 。 因为在位数相同的情况下 , 定点数的表示范围要比浮点数小 。 所以在计算机科学中 , 使用浮点数来表示实数的近似值 。
推荐阅读
- 大一非计算机专业的学生,如何利用寒假自学C语言
- 红米K40渲染图曝光:居中挖孔+后置四摄,这外观你觉得如何?
- 奋斗|该如何看待拼多多员工猝死:鼓励奋斗,也要保护好奋斗者
- 装机点不亮 如何简易排查硬件问题?
- 虾米音乐宣布关停!我的歌单如何导入QQ音乐、网易云音乐?
- 人脸识别设备主板如何选型 软硬整合大幅缩短开发时间
- Mini-LED产品效果究竟如何?
- 专家介绍如何判断智能手机被入侵:运行速度变慢、电池消耗过快以及卡顿
- 最便宜的骁龙888手机?红米K40曝光:这外观如何?
- 广色域还不够 投影如何实现精准色彩还原?