這個問題困擾了我不少時間,最近有個比較清晰的認識,和大家分享。
這個問題首先要從數位表示法說起。今天我們看到的123這樣的十進制數,是自然而然的理解其意義,但是有沒有深究其內在的數學原理呢?
所謂十進制是0~9十個基本符號為基礎的一種數字表示法,數位表示法是將一串基本符號從左到右連續排列的一種方法。為什么12時表示一十二,而不是二十一,或者是一加二的意思呢?因為數字所處的位置是有特別意義的,最右邊第一個數字符號,代表基本的數0~9,而第二位的意義並不是0~9,而是0*10~9*10。推而廣之,百位是x*100,(x是符號),用簡練的數學公式就是x*10^k , 個位k是0,十位是1,百位k是2,從右到左一直數下去。123的意思就是1*10^2+2*10^1+3*10^0。
位置,進制,符號這三者的關系就是“123”這種數字表示法內在的數學原理。
那么,0.1 是什么意思?是1*10^-1,向右數數的結果。小數點是為了區分個位的位置在哪里。
一個數要用“數位表示法”表示出來,必然需要能夠化為x*10^k的形式,而並不是任意數都能夠做到。從數位法小數的定義看可以得知,一個數要能夠被表示出來,需要能除盡10,才有若干個x*10^k 的數位組合表示它,否則就是無數個符號才能表示。如1/3這個數除以10等於1/3*1/10 = 0.0333333….循環小數。
究竟哪些數可以用十進制表示哪些不可以?如分母是10的因子和因子的合數,如1,2,5,10,20,50等(整數分母為1,而任意大於1的數的因子都有1和自身,因此整數可以用任意數制精確表示)。
回答題目,為什么0.1無法被二進制小數表示,0.1即1/10這個數要轉換成二進制即x*2^k的組合數,必須要除盡2.要注意,2進制只有0,1兩個符號,另一個需要注意,二進制被除數右移一位等於*2,而非10進制的*10。
1/10*1/2 = 1/20
1*2*2*2*2 = 32 右移4位
-20 = 12 商1
12*2 = 24 右移1位
-20 = 4 商1
4*2*2*2 =32 右移3位
-20 = 12 商1 可見數字重復了,循環小數無疑
即 0.00011001。
那么2進制能夠表示哪些十進制小數,5/10,因為能約成1/2,分母是2的因子。
總結一點,就是位置表示法有其自身的缺陷,並不能在有限的數位,表示眾多有理數,這個時候,需要借助分數來幫忙,來避免位置表示法以固定數作分母這個缺點。
如果需要一個可以避免循環小數的數制,不妨試用210進制,因為因子比較多,2*3*5*7 =210.