负数和3.14,怎么装进去?
到目前为止,我们只装了0、1、2这样的正整数。可零下5度、余额的负数、3.14这种,怎么用0和1来装呢?有两个聪明的办法。
把最前面那个开关当符号
装负数的第一个想法很简单。
拿出一个开关,
专门用来当符号。
最前面那位是0就是正,
是1就是负。
剩下的开关表示大小。
最前面是符号,剩下的是大小。
只改最前面,
+5就变成-5。
简单吧。
可这办法,
有点小麻烦。
算的时候得另外操心符号,
而且还冒出两个零:
正零和负零。
把数转一圈,造出负数
所以电脑真正用的办法,
更聪明一点。
想想汽车的里程表。
从9999再走1,
就翻到0000。
反过来,从0减1,
就翻到最末尾那个数。
利用这一点,
就把末尾那些数当成负数用了。
同样的位,转一圈就成了负数。
这办法叫补码。
好处是,
就算加负数,
只要照常加,
加法电路自己就给出对的答案。
不用另外造减法。
所以电脑选了这个办法。
小数点是会浮动的
这回是3.14这样的小数。
秘密就在名字里。
小数点不是固定的,
是浮动的。
同样的数字,
看你把小数点点在哪,
大数小数都能表示。
在314这个数字上,
挪一挪那个点。
挪一挪点,同样的数字就成了不同的值。
点往左,就变小,
往右,就变大。
正因为小数点会浮动,
从很大的数,
到很小的数,
都能用同一种方式来装。
所以名字叫浮点,
会浮动的小数点。
拆成符号、大小、位数
那浮动的小数点,
怎么用0和1来装呢?
把开关分成三部分。
前面是符号(刚学的那个),
中间是小数点的位置(有多大),
剩下的是实际的数。
把开关分成三个区来装。
有这三块,
任何带浮动小数点的数,
都能用0和1写出来。
跟科学里用的记法,
是一个想法。
就像把3.14拆成0.314乘10一样。
电脑有时并不精确知道0.1
用一个有趣的事实,
来收尾。
让电脑算0.1加0.2,
有时不会正好是0.3。
会差那么一丁点。
因为0.1,
用0和1,
装不干净。
我们眼里是0.3,可电脑里头还留着极小的误差。
就像我们把1除以3,
得写成0.3333...没完没了,
0.1在0和1的世界里,
也是个没完没了的数。
所以得在某处截断,
那儿就生出极小的误差。
不是电脑算错了,
是用0和1装小数这种方式的极限。