好,那我們接下來呢來介紹浮點數。
浮點數其實說起來就是小數嘛,那它在幹什麼呢? 今天如果在電腦裡我們想要儲存所謂的小數,或者說Fractional
numbers,0.8 0.75、 2.34、 這個3.1415等等。
我們在電腦裡我們使用的術語是說我們叫做一個浮點數。
那我們大概看一下,簡單地來說就是如果我給你若干個bit來表示
一個浮點數來表示一個小數的話,我們會把這若干個
bit切成三個部分,也就是畫面上看到的藍色、 橘色和綠色
這三個部分,他們分別是什麼呢?第一個bit一樣是表示正負號,所以可以 看到這裡。
如果a5是0或者a5是1,它們表示的正號或負號就會不一樣。
接下來的兩個部分我們用一個小數點隔開,你感覺是小數點其實不完全是。
那這個點現在在這裡表示什麼呢?是表示我們把剩餘的bit切成兩段。
分別表示有點像科學記號的前面那一半以及指數的
那一半,那我們這個講起來有點複雜,但你可以看到a1、 a0對應到的是
科學記號的前面那一半,而a4、 a3、 a2則是對應到指數的那一半。
那我們 來試著看看這到底在講什麼吧。
這裡有一個例子,我今天如果給你6個bit 然後它們的值分別是0、
1、 1、 0、 1、 1 這樣子。
那0,第一個0,藍色的0表示這是一個正數,這個ok。
接下來的1、 1、 0 ,1、 1、 0會變成什麼呢?1、 1、 0會變成這個2的-2次方的-2。
因為第一個1表示負,1、 0表示2這樣子所以這個表示
-1,這個表示 2這樣,那表示我要把點
後面的1、 1的這個3來乘上2的負2次方。
那如果我們是使用這樣子的表示法的話有什麼好處呢?誒,首先我如果要
表示很大的數,那這個東西用起來是ok,因為這裡可以是正的,我可以把某個數字乘上 2的10次方、
2的15次方、 2的30次方,好,這件事情是辦得到的,只要我給你很多bit的話。
所以 用浮點數表示法事實上可以存的整數範圍,呃,應該說
可以存的最大的整數比你用整數表示法還要更大。
那其次 這個圈起來的指數部分可以是負的,表示我可以表示小數了。
我可以表示1/4、 1/8、 1/16、
1/32或者是其他形態的小數,那麼這樣子的話我們就可以 用電腦來表示小數了。
你如果只有6個bit的話,當然你能表示的小數的 數量是很有限的,但是你如果有32個bit、
64個bit等等的話,那這個威力就強大多啦! 那另外在電腦裡面它們事實上
現在使用的規格是更為複雜一點。
就是這個所謂的點它是會漂的,它是會浮的。
好,電腦裡面會把你 給你的這一塊,表示浮點數的這個空間的bit的
其中一塊再挖來表示說,這個浮點數的這個點 現在是點在什麼地方。
所以點的前面跟點的後面要各別地 做一些interpretation,各別做一些解讀,這樣子。
那麼在這個情況下我們就可以表現出更多的值,並且增強
我們的precision,好,所以這是為什麼浮點數或者說小數 在電腦裡面要被稱為浮點數。
在更久以前是叫做 fixed point number,就是那個點的位置是固定的,然後後來科學家們發現
誒,我有時候是想要表示很大的數,有時候是想要表示小數點後面有很多位數。
所以這個點如果可以飄來飄去就會更方便了,大概是這個樣子。
那今天當然不是要教這些細節,所以大家 略知一二就可以了。
你知道電腦裡面是2進位,然後表示整數,你剛剛已經知道怎麼做了。
那要表示小數的原理,大概就是我們把這一個用來表示小數的bit們
切成好幾部分,各別表示不同的任務,這樣子就可以了。
好,那麼實際上在Python裡面我們要怎麼樣產生浮點數呢?
那也很簡單,基本上就是我們要來宣告或者是
使用所謂的float,我們如果在電腦語言的世界裡面講float
通常就是表示一個floating point number,就是一個浮點數的意思。
那我們來看一下,今天如果我想要使用一個float 並且我要給它始值的話,就這麼做就好了。
好,宣告一個整數的話就給它一個整數,宣告一個小數就給它一個小數。
所以呢, i=52.0的話i就會變成浮點數。
那麼如果 我不想要給它初始值,那我就用float
這個函數而不是用int,而不是給它2.0這樣子
好,那我們來試一下。
好,今天我們先給它52.0,如果我執行下去
可以看到,哦,果然i是52.0而且class不再是int,class現在變成fl- oat。
表示電腦確實可以看得出來,嗯,這個i要理解為float 才對。
那今天如果我這裡寫的是float 而不是寫一個特定數字的話也沒有問題。
它就會被預設,設定成0.0,也就是0的意思。
所以這個是float的預設值。
那麼最後來補充說明一下,所以這個是為什麼我們在講這門課或者是講基本的
電腦科學的課的時候必須要討論值 或者是不同形態的值它在電腦裡被儲存的方式。
因為這跟電腦在你宣告變數的時候配置記憶體和 理解記憶體的時候有關。
當我們宣告一個變數的時候 它到底是什麼形態是重要的。
你如果有給它初始值,52、 48、
39.6等等的; 電腦會根據你給的初始值在Python裡面設定它的
變數的形態,為什麼電腦一定要這麼做呢?因為 我們的作業系統,operating
system,我們的作業系統去 理解一個值的時候是根據它的形態在做理解的。
如果我同樣給你6個bit,而且裡面塞著一模一樣的0、 1、
0、 1 但是一個是整數一個是小數的話,代表的值就會完全不一樣,比如說這個例子。
我如果是浮點數,或者我是整數,同樣6個bit,同樣存0、 1、 1、 0、 1、 1.。
在浮點數會變成0.75,電腦會理解這6個bit為0.75。
但如果是整數的話,電腦會理解它為27,所以電腦看著它的記憶體 裡面有各式各樣的0、 1、
0、 1、 0、 1、 0、 1,這一塊0、 1、 0、 1,那一塊0、 1、 0、
1, 如果電腦不知道,如果你沒有告訴它,這6個bit是表示一個整數,那6個bit是表示一個
浮點數的話,電腦就就沒有辦法判斷這個0、 1、 1、 0、 1、 1 到底是要解讀成0.75還是解讀成27了。
好,所以形態這件事情,雖然我們程式寫大了、 寫久了以後可能會
讓電腦都幫我們處理,所以你不用特別煩惱,但是基本的原理還是應該要知道的。
好,我們之所以需要討論形態這件事情就是因為如果電腦不知道一塊空間的形態
它無從判斷裡面存的值對到底要怎麼被轉化成我們
人類可以理解的值,好,所以這就是我們為什麼需要處理形態啦!