在選擇計(jì)算機(jī)的數(shù)據(jù)表示方式時(shí),通常需要考慮4點(diǎn)因素:
要表示的數(shù)據(jù)類型(整數(shù)峦剔,小數(shù),實(shí)數(shù)和復(fù)數(shù))
數(shù)值范圍
精確度
數(shù)據(jù)存儲(chǔ)和處理所需要的硬件代價(jià)
計(jì)算機(jī)處理的數(shù)據(jù)多帶有小數(shù)點(diǎn)荞彼,小數(shù)點(diǎn)在計(jì)算機(jī)中可以有兩種方法表示觉既;一種數(shù)約定數(shù)值的小數(shù)點(diǎn)固定在某一位置,稱為定點(diǎn)表示法阀参,簡(jiǎn)稱為定點(diǎn)數(shù)肝集。對(duì)應(yīng)的另一種方法,小數(shù)點(diǎn)可以任意浮動(dòng)蛛壳,稱為浮點(diǎn)表示法杏瞻,簡(jiǎn)稱為浮點(diǎn)數(shù)。
1. 定點(diǎn)數(shù)表示法(fixed-point)
所謂定點(diǎn)衙荐,就是約定機(jī)器中數(shù)據(jù)的小數(shù)點(diǎn)位置固定不變捞挥。在計(jì)算機(jī)中,通常將數(shù)據(jù)的小數(shù)點(diǎn)固定在數(shù)據(jù)的最高位之前或者最低位之后忧吟。前者稱為定點(diǎn)小數(shù)砌函,后者稱為定點(diǎn)整數(shù)。
定點(diǎn)小數(shù)是純小數(shù),約定的小數(shù)點(diǎn)位置在符號(hào)位之后讹俊、有效數(shù)值部分最高位之前垦沉。若數(shù)據(jù) x 的形式為 x = x0.x1x2…xn ( 其中x0為符號(hào)位,x1~xn是數(shù)值的有效部分劣像,也稱為尾數(shù)乡话, x1為最高有效位 ),則在計(jì)算機(jī)中的表示形式為:
一般說(shuō)來(lái)耳奕,如果最末位 xn = 1绑青,前面各位都為 0 ,則數(shù)的絕對(duì)值最小屋群,即 |x|min = 2^(-n) 闸婴。如果各位均為 1,則數(shù)的絕對(duì)值最大芍躏,即 |x|max =1-2^(-n) 邪乍。所以定點(diǎn)小數(shù)的表示范圍是:
定點(diǎn)整數(shù)是純整數(shù),約定的小數(shù)點(diǎn)位置在有效數(shù)值部分最低位之后对竣。若數(shù)據(jù) x 的形式為 x = x0 x1x2…xn ( 其中x0為符號(hào)位庇楞,x1~xn 是尾數(shù), xn 為最低有效位 )否纬,則在計(jì)算機(jī)中的表示形式為:
定點(diǎn)整數(shù)的表示范圍是:
當(dāng)數(shù)據(jù)小于定點(diǎn)數(shù)能表示的最小值時(shí)吕晌,計(jì)算機(jī)將它們作0處理,稱為下溢临燃;大于定點(diǎn)數(shù)能表示的最大值時(shí)睛驳,計(jì)算機(jī)將無(wú)法表示,稱為上溢膜廊,上溢和下溢統(tǒng)稱為溢出乏沸。
計(jì)算機(jī)采用定點(diǎn)數(shù)表示時(shí),對(duì)于既有整數(shù)又有小數(shù)的原始數(shù)據(jù)爪瓜,需要設(shè)定一個(gè)比例因子蹬跃,數(shù)據(jù)按其縮小成定點(diǎn)小數(shù)或擴(kuò)大成定點(diǎn)整數(shù)再參加運(yùn)算,運(yùn)算結(jié)果铆铆,根據(jù)比例因子炬转,還原成實(shí)際數(shù)值。若比例因子選擇不當(dāng)算灸,往往會(huì)使運(yùn)算結(jié)果產(chǎn)生溢出或降低數(shù)據(jù)的有效精度扼劈。
用定點(diǎn)數(shù)進(jìn)行運(yùn)算處理的計(jì)算機(jī)被稱為定點(diǎn)機(jī)。
2. 浮點(diǎn)數(shù)表示法(floating-point number)
與科學(xué)計(jì)數(shù)法相似菲驴,任意一個(gè)J進(jìn)制數(shù)N荐吵,總可以寫成:
式中M稱為數(shù) N 的尾數(shù)(mantissa),是一個(gè)純小數(shù);E 為數(shù) N 的階碼(exponent)先煎,是一個(gè)整數(shù)贼涩,J稱為比例因子 J^(E)的底數(shù)。這種表示方法相當(dāng)于數(shù)的小數(shù)點(diǎn)位置隨比例因子的不同而在一定范圍內(nèi)可以自由浮動(dòng)薯蝎,所以稱為浮點(diǎn)表示法遥倦。
底數(shù)是事先約定好的(常取2),在計(jì)算機(jī)中不出現(xiàn)占锯。在機(jī)器中表示一個(gè)浮點(diǎn)數(shù)時(shí)袒哥,一是要給出尾數(shù),用定點(diǎn)小數(shù)形式表示消略。尾數(shù)部分給出有效數(shù)字的位數(shù)堡称,因而決定了浮點(diǎn)數(shù)的表示精度。二是要給出階碼艺演,用整數(shù)形式表示却紧,階碼指明小數(shù)點(diǎn)在數(shù)據(jù)中的位置,因而決定了浮點(diǎn)數(shù)的表示范圍胎撤。浮點(diǎn)數(shù)也要有符號(hào)位晓殊。因此一個(gè)機(jī)器浮點(diǎn)數(shù)應(yīng)當(dāng)由階碼和尾數(shù)及其符號(hào)位組成:
其中 ES 表示階碼的符號(hào),占一位伤提,E1~En 為階碼值挺物,占 n 位,尾符是數(shù) N 的符號(hào)飘弧,也要占一位。當(dāng)?shù)讛?shù)取 2 時(shí)砚著,二進(jìn)制數(shù) N 的小數(shù)點(diǎn)每右移一位次伶,階碼減小 1,相應(yīng)尾數(shù)右移一位稽穆;反之冠王,小數(shù)點(diǎn)每左移一位,階碼加 1舌镶,相應(yīng)尾數(shù)左移一位柱彻。
若不對(duì)浮點(diǎn)數(shù)的表示作出明確規(guī)定,同一個(gè)浮點(diǎn)數(shù)的表示就不是唯一的餐胀。例如 11.01 也可以表示成 0.011012^(-3) 哟楷,0.1101×2^(-2) 等等。為了提高數(shù)據(jù)的表示精度否灾,當(dāng)尾數(shù)的值不為 0 時(shí)卖擅,其絕對(duì)值應(yīng)大于等于 0.5,即尾數(shù)域的最高有效位應(yīng)為 1,否則要以修改階碼同時(shí)左右移小數(shù)點(diǎn)的方法惩阶,使其變成這一要求的表示形式挎狸,這稱為浮點(diǎn)數(shù)的規(guī)格化表示。
當(dāng)一個(gè)浮點(diǎn)數(shù)的尾數(shù)為 0 時(shí)断楷,不論其階碼為何值锨匆,或者當(dāng)階碼的值遇到比它能表示的最小值還小時(shí),不管其尾數(shù)為何值冬筒,計(jì)算機(jī)都把該浮點(diǎn)數(shù)看成 0 值恐锣,稱為機(jī)器零*。
浮點(diǎn)數(shù)所表示的范圍比定點(diǎn)數(shù)大账千。假設(shè)機(jī)器中的數(shù)由 8 位二進(jìn)制數(shù)表示(包括符號(hào)位):在定點(diǎn)機(jī)中這 8 位全部用來(lái)表示有效數(shù)字(包括符號(hào))侥蒙;在浮點(diǎn)機(jī)中若階符、階碼占 3 位匀奏,尾符鞭衩、尾數(shù)占 5 位,在此情況下娃善,若只考慮正數(shù)值论衍,定點(diǎn)機(jī)小數(shù)表示的數(shù)的范圍是 0.0000000 到 0.1111111,相當(dāng)于十進(jìn)制數(shù)的 0 到 127/128聚磺,而浮點(diǎn)機(jī)所能表示的數(shù)的范圍則是 2 - 11×0.0001 到 211×0.1111坯台,相當(dāng)于十進(jìn)制數(shù)的 1/128 到 7.5 。顯然瘫寝,都用 8 位蜒蕾,浮點(diǎn)機(jī)能表示的數(shù)的范圍比定點(diǎn)機(jī)大得多。
盡管浮點(diǎn)表示能擴(kuò)大數(shù)據(jù)的表示范圍焕阿,但浮點(diǎn)機(jī)在運(yùn)算過(guò)程中咪啡,仍會(huì)出現(xiàn)溢出現(xiàn)象。下面以階碼占 3 位暮屡,尾數(shù)占 5 位(各包括 1 位符號(hào)位)為例撤摸,來(lái)討論這個(gè)問題。圖 2-1 給出了相應(yīng)的規(guī)格化浮點(diǎn)數(shù)的數(shù)值表示范圍褒纲。
圖 中准夷,“可表示的負(fù)數(shù)區(qū)域”和“可表示的正數(shù)區(qū)域”及“0”,是機(jī)器可表示的數(shù)據(jù)區(qū)域莺掠;上溢區(qū)是數(shù)據(jù)絕對(duì)值太大衫嵌,機(jī)器無(wú)法表示的區(qū)域;下溢區(qū)是數(shù)據(jù)絕對(duì)值太小彻秆,機(jī)器無(wú)法表示的區(qū)域渐扮。若運(yùn)算結(jié)果落在上溢區(qū)论悴,就產(chǎn)生了溢出錯(cuò)誤,使得結(jié)果不能被正確表示墓律,要停止機(jī)器運(yùn)行膀估,進(jìn)行溢出處理。若運(yùn)算結(jié)果落在下溢區(qū)耻讽,也不能正確表示之察纯,機(jī)器當(dāng) 0 處理,稱為機(jī)器零针肥。
一般來(lái)說(shuō)饼记,增加尾數(shù)的位數(shù),將增加可表示區(qū)域數(shù)據(jù)點(diǎn)的密度慰枕,從而提高了數(shù)據(jù)的精度具则;增加階碼的位數(shù),能增大可表示的數(shù)據(jù)區(qū)域具帮。
From Here.