Download presentation
Presentation is loading. Please wait.
1
單精度浮點數的表示方式 確定 圖3-7 List 3-2 的執行結果
精度浮點 及表示 「+1.5 × 2的-1次方」 ,而2的-1次方是0.5,所以+1.5 × 0.5=+0.75。沒錯,剛好就是0.75。 單精度浮點數的表示方式 確定 圖3-7 List 3-2 的執行結果 利用這個測試程式即可找出10進位小數0.1的單精度浮點數即為 (把程式中f = (float)0. 75);的部份改成f =(float)0.1;即可 )。不必擔心,不會要各位讀者去算換算成10進位數字是多少,反正絕對不會剛好0.1。
2
如何避免電腦計算出錯 電腦計算出錯的原因是ㄧ是使用浮點數處理小數部份 (其他像是「多出位數」或「短少位數」都可能造成計算錯誤) ,無論程式的資料型態是使用單精度浮點數型態、或雙精度浮點數型態都可能會發生計算錯誤的問題。下面介紹兩種避免電腦計算出錯的方法。 第一種處理方式是「錯誤忽略」。有些特殊用途的程式允許微小的運算誤差。例如,利用電腦設計工業產品時,ㄧ個由100個0.1厘米長的零件連接而成的產品不一定非剛好10厘米不可,9.9999厘米應該也可以接受。在一般所謂的「科技運算」領域,電腦運算結果只要有近似值就行,微不足道的錯誤都可以忽略。 另一種處理方式是「先以整數取代小數再進行運算」 雖然電腦在處理小數運算可能會出錯,但整數運算絕對不會有問題 (只要數值在可處理的範圍之內) 。只在進行運算時暫時使用整數,運算結果仍以小數表示。以文章所舉的第一個範例0.1連加100次來說,0.1乘以10倍,改成1連加100次的運算,然後將該運算結果除以10再輸出即可(List 3-3)。有些程式語言甚至具有可自動化進行的資料型態,稱為「貨幣型態」(如Visual Basic的Currency型態等)。
3
{List 3-3} 小數先改成整數後再進行運算的Visual Basic程式
Sub main() dim d as long dim I as long ‘初始化儲存加總值的變數. d=0 ‘1連加100次. for i=1 to 100 d=d+1 next I ‘求出的結果除以100. d=d/100 ‘輸出結果. msgbox format (d) , vb0k0nly , “0.1連加100次的結果” End sub 以2進位數字表示10進位數字的方式還有「BCD(Binary Coded Decimal)*」的格式,它是利用4個位元表示數字0~9,細節說明不另贅述。如果是要求絕不能發生誤差的運算(如跟金錢等有關),就要選擇暫以整數代用的方法、或BCD法,才能得到正確的運算結果。
4
2進位數字與16進位數字 圖3-8 利用16進位數字減少位數
2進位數字與16進位數字 最後還有一點補充說明,就是2進位數字和16進位數字 *的關係。以位元為單位表示資料時,2進位數字真的很好用,可惜位數會越拉越長,看起來有點吃力。所以程式設計在實務上偏向以16進位數字取代2進位數字的作法。 Visual Basic的程式裡的數值前面有「&H」,則表示這是16進位數字,C語言也是在數值前面加上「0x」。 2進位數字的4位數剛好等於16進位數字的1位數。例如一個32位數的2進位數字「 」弱改寫成16進位數字,則為8位數的「3DCCCCD」。利用16進位數字讓2進位數字的總位數整整減成1/4,位數少一點,看起來會比較好懂吧(圖3-8) 即使是有小數的2進位數字,改寫成16進位數字時,小數點以下4位也等於16進位數字的1位數。若2進位數字的最後一組位數不滿4位數,直接補0即可。例如,「 」在後面補0變成「 」,即可寫成16進位數字的「B.6」(圖3-9)。16進位數字數字的小數點以下第一位是16-1(1/16= ),應該不必另外解釋了吧。 16進位數字(8位數) 2進位數字(32位數) = sdccccd 圖3-8 利用16進位數字減少位數
5
圖3-9 小數部份也是2進位數字的4位數等於16進位數字的第一位
2進位數字(小數點以下3位) 進位數字(後面補0) 進位數字 圖3-9 小數部份也是2進位數字的4位數等於16進位數字的第一位 看完了第2章和本章,各位應該已經了解電腦以2進位格式處理資訊(數值)的構造。下一張繼續說明儲存這些資訊的記憶體。如果各位以後在設計程式時可能同時考慮到記憶體的問題,相信本來只知套用的陣列、指標等也會逐漸明朗化。
6
術 語 解 說 次方倍數 次方倍數是指各位位數值所乘的值(詳情參見第2章p.28)。 循環小數
同樣數字不停重複下去的數值稱為循環小數,如0.333…。電腦不處理循環小數。 雙精度浮動數的可能表現範圍為:正數 ×10-324~1.79 ×10-308、負數 ×10308~ 7×10-324。單精度浮動數的可表現範圍為:正數 ×10-45~ 3×1038、負數 ×1038~ ×10-45。但如內文說明所述,其中尚有部份數值無法正確表示。 浮點數 並非實際小數點位置的方式表示小數部分稱為「浮點數」,如 ×103、 ×10-1。跟浮點數成對比的則稱為「固定小數」,以實際小數點位置的方式表示小數部分。若 ×103、 ×10-1寫成固定小數,即為123.45和 。 IEEE IEEE(Institute of Electrcal and Electronics Engineers)是「美國電子電機工程師協會」的縮寫,制定電腦相關領域的各種規格。英文唸法是「I triple E」。 規則運算式 規則運算式是只根據指定的規則,整理並表示資料。不只是小數,字串顯示、資料庫等也都有規則運算式。
7
BCD BCD(Binary Coded Decimal;2進碼10進位)是另一種表示電腦可用數值的資料方式。早期的大型電腦比較常用BCD,程式語言還有COBOL支援BCD。BCD又分「分區10進位格式」和「聚值10進位格式」兩種。 16進位 16進位數字是每滿16即進1位的計數方法。10~15以英文字母A~F表示。16進位數字的1位數相當於2進位數字的4位數,所以常用來取代2進位數字。
8
假設對方是天真無邪的小學生,請解釋CPU和2進位數字
欄 專 換成是你該怎麼解釋? 小 假設對方是天真無邪的小學生,請解釋CPU和2進位數字 這個部分希望所有讀者都能來自我挑戰,該怎麼對那些一輩子不會有機會碰到程式的族群說明程式動作的原理。如果各位已經充分理解程式的本質,相信應該能以最淺顯易懂的貼切方式說明清楚。請不要使用專業術語。借用本書的小專欄部份,筆者嘗試挑戰跟小學生或老阿嬤說明的極限。換成是自己的話,該怎麼解釋?希望各位邊讀邊思考這個問題。 大家有沒有看過電腦阿? 有~! 哪裡看過的? 學校裡有電腦。 大家用電腦做什麼? 畫畫、上網。 很好哇,大家都很會用電腦ㄟ。不過,你們知道電腦裡面是做什麼的嗎? ㄟ,不知道… 嗯,那讓叔叔來告訴大家。好,大家看這裡。 那是什麼?
9
這個叫CPU,是電腦裡面的零件。有了這個零件,大家才能用畫畫的程式啦、上網,它還會算數喔。電腦裡面有很多零件,其中最重要的就是CPU。
它怎麼有那麼多刺刺(針腳)喔? 喔,有人注意到啦。這個針腳是用來通電的。 通電?怎麼通呀、會發亮嗎? 不,CPU不會發亮。有電才能叫CPU做事、告訴他一些數字。好比說,如果要叫電腦算1+2的話,就要命令它「把這些加起來」、還要告訴它1、2這些數字。 要怎麼做才能用電命令電腦、告訴它數字呢? 問的好。這個有一個規定,CPU的針頭有通電的時候是數字1、沒有通電的時候是數字0。我們人類會用10個數字,可是靠電才能動的電腦只會用0和1而已。怎麼樣,很有趣吧? 只有0跟1又數不了幾個數字。 不會喔,你試試看。0、1、10、11、100、…、1010,你看,不是也可以算0~10嗎! 哪有1的後面是10(壹零),好好笑喔。 (呵呵,終於ㄠ到重點了…)怎麼會呢,這種作法叫做2進位數字。我們數數字的時候是0、1、2、3、…、9、10,9的後面是10,對不對?這種數法叫做10進位數字。電腦只會用2進位數字,也就是1和0來數數字,所以0、1的後面就變成10了。 叔叔在講什麼?聽不懂啦。 (冒冷汗…)嗯,那我們換個方式講吧。人類會用的數字剛好是0~9,但是在很遠很遠的宇宙盡頭,有些外星人只會用0和1而已啊。電腦就很像是外星人那樣,這樣,懂不懂? ??? 大聲一點! 懂不懂? 懂…,大概有懂啦。 喔……
10
xow*vtep worake peolov Chapter 4 方方的記憶體要 圓圓的用 how program works
Similar presentations