漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3?
文章插图
作者 | 漫话编程
来源 | 漫话编程(ID:mhcoding)
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
为什么当我们使用电脑浏览器计算0.2+0.1的时候 , 解决却是0.30000000000000004 , 而 0.1+0.6 的结果却是 0.7 呢?
这个问题其实一直是一个经典的问题 , 甚至有一个网站的域名就是, 主要就是解释这个问题的 。
在这个网站中 , 列举了各种编程语言中计算 0.2+0.1 的结果 , 摘选几个如下:
文章插图
?
文章插图
可以看到 , 在各种语言中 , 计算 0.2+0.1 的结果都出奇的一致 , 那就是这个神奇的0.30000000000000004 。
其实 , 当我们使用浏览器的控制台(F12)进行计算的时候 , 用到的就是JavaScript语言进行计算的 , 所以 , 前面的现象 , 归根结底其实和具体的编程语言无关 。
主要问题还是计算机中到底是如何表示小数以及如何进行小数运算的 。
文章插图
文章插图
我们知道 , 计算机只认识0和1 [为什么计算机只认识0和1] , 现实世界中的内容想要通过计算机存储、计算或者展示 , 都需要转换2进制 。 在现实世界中 , 数字主要有整数和小数两种 。
在之前的[为什么计算机用补码存储数据]这篇文章中 , 我们介绍过 , 计算机中表示整数的方式有很多 , 如原码、反码以及补码等 。
整数包括正整数、负整数以及零 。 在计算机中存储的整数则分为有符号数和无符号数 。
对于无符号数 , 采用哪种编码方式都无所谓 , 对于有符号数的编码方式 , 常用的是补码 。
那么 , 一个十进制数字想要获得其二进制的补码 , 需要先通过一定的算法得到他对应的原码 。
文章插图
文章插图
文章插图
十进制转二进制
首先我们看一下 , 如何把十进制整数转换成二进制整数?
十进制整数转换为二进制整数采用"除2取余 , 逆序排列"法 。
具体做法是:
- 用2整除十进制整数 , 可以得到一个商和余数;
- 再用2去除商 , 又会得到一个商和余数 , 如此进行 , 直到商为小于1时为止
- 然后把先得到的余数作为二进制数的低位有效位 , 后得到的余数作为二进制数的高位有效位 , 依次排列起来 。
文章插图
那么 , 十进制小数转换成二进制小数 , 又该如何计算呢?
十进制小数转换成二进制小数采用"乘2取整 , 顺序排列"法 。
具体做法是:* 用2乘十进制小数 , 可以得到积 * 将积的整数部分取出 , 再用2乘余下的小数部分 , 又得到一个积 * 再将积的整数部分取出 , 如此进行 , 直到积中的小数部分为零 , 此时0或1为二进制的最后一位 。 或者达到所要求的精度为止 。
文章插图
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 培育|跨境电商人才如何培育,长沙有“谱”了
- 抖音小店|抖音进军电商,短视频的商业模式与变现,创业者该如何抓住机遇?
- 计费|5G是如何计费的?
- Win10系统桌面|手机桌面秒变Win10电脑系统,这波操作太给力了!
- 车轮旋转|牵引力控制系统是如何工作的?它有什么作用?
- 发生|差评遭外卖员上门辱骂拍摄?不给差评是善解人意,不是理所当然!
- 视频|短视频如何在前3秒吸引用户眼球?
- Vlog|中国Vlog|中国基建如何升级?看5G+智慧工地