




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、浮點(diǎn)數(shù)的表示和基本運(yùn)算1浮點(diǎn)數(shù)的表示通常,我們可以用下面的格式來(lái)表示浮點(diǎn)數(shù)SP其中S是符號(hào)位,P是階碼,M是尾數(shù)對(duì)于IBM-PC而言,單精度浮點(diǎn)數(shù)是32位(即4字節(jié))的,雙精度浮點(diǎn)數(shù)是64位(即8字節(jié))的。兩者的S, P, M所占的位數(shù)以及表示方法由下表可知SPM表示公式偏移量1823(-1)S*2 (P-127)*1.M12711152(-1)S*2 (P-1023) *1.M1023以單精度浮點(diǎn)數(shù)為例,可以得到其二進(jìn)制的表示格式如下S (第31位)P (30位到23位)W(22位到0位)其中S是符號(hào)位,只有0和1,分別表示正負(fù);P是階碼,通常使用移碼表示(移碼和補(bǔ)碼只有符號(hào)位相反,其余都一
2、樣。對(duì)于正數(shù)而言,原碼,反碼和補(bǔ)碼都一樣;對(duì)于負(fù)數(shù)而言,補(bǔ)碼就是其絕對(duì)值的原碼全部取反,然后加1) 為了簡(jiǎn)單起見,本文都只討論單精度浮點(diǎn)數(shù),雙精度浮點(diǎn)數(shù)也是用一樣的方式存儲(chǔ) 和表示的。2浮點(diǎn)數(shù)的表示約定單精度浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)都是用IEEE754標(biāo)準(zhǔn)定義的,其中有一些特殊約定。(1) 當(dāng) P = 0, M 二 0 時(shí),表示 0。(2) 當(dāng)P二255, M二0時(shí),表示無(wú)窮大,用符號(hào)位來(lái)確定是正無(wú)窮大還是負(fù)無(wú) 窮大。(3) 當(dāng) F 二 255, M !二 0 時(shí),表示 NaN (Not a Number,不是一個(gè)數(shù))。當(dāng)我們使用Net Framework的時(shí)候,我們通常會(huì)用到下面三個(gè)常量Cons
3、ole. WriteLine(float. MaxValue); / 3. 402823E+38Console. WriteLine(float. MinValue);/-3. 402823E+38Console. WriteLine(float. Epsilon);/1.401298E-45如果我們把它們轉(zhuǎn)換成雙精度類型,它們的值如下Console. WriteLine(Convert ToDouble(float MaxValue); /3. 40282346638529E+38Console. WriteLine(Convert ToDouble(float MinValue);/- 3
4、.40282346638529E+38/1.401Console. WriteLine(Convert. ToDouble(float. Epsilon);29846432482E-45那么這些值是如何求出來(lái)的呢?根據(jù)上面的約定,我們可以知道階碼P的最大值是11111110 (這個(gè)值是254,因?yàn)?亦用于特殊的約定,那么對(duì)于可以精確表示的數(shù)來(lái)說,254就是最大的階碼T)。尾數(shù)的最大值是uiiio那么這個(gè)最大值就是:0 11111110 lllllo也就是 2(254-127)* (1. 11111)2= 2127* (1+1-2-23) = 3. 40282346638529E+38從上面的雙
5、精度表示可以看出,兩者是一致的。最小的數(shù)自然就是-3.40282346638329E+38。對(duì)于最接近于0的數(shù),根據(jù)IEEE754的約定,為了擴(kuò)大對(duì)0值附近數(shù)據(jù)的表示能 力,取階碼P二-126,尾數(shù)M二(0. 00001)2 o此時(shí)該數(shù)的二進(jìn)制表示為:0 00000000 00001也就是 2-126* 2-23= 2-149 = 1. 40129846432482E-45。這個(gè)數(shù)字和上面的 Epsilon是一致的。如果我們要精確表示最接近于0的數(shù)字,它應(yīng)該是0 00000001 00000也就是:2-126* (1+0)=1.229E-38。3浮點(diǎn)數(shù)的精度問題 浮點(diǎn)數(shù)以有限的32bit長(zhǎng)度來(lái)
6、反映無(wú)限的實(shí)數(shù)集合,因此大多數(shù)情況下都是一個(gè)近 似值。同時(shí),對(duì)于浮點(diǎn)數(shù)的運(yùn)算還同時(shí)伴有誤差擴(kuò)散現(xiàn)象。特定精度下看似相等的 兩個(gè)浮點(diǎn)數(shù)可能并不相等,因?yàn)樗鼈兊淖钚∮行粩?shù)不同。山于浮點(diǎn)數(shù)可能無(wú)法精確近似于十進(jìn)制數(shù),如果使用十進(jìn)制數(shù),則使用浮點(diǎn)數(shù)的數(shù) 學(xué)或比較運(yùn)算可能不會(huì)產(chǎn)生相同的結(jié)果。如果涉及浮點(diǎn)數(shù),值可能不往返。值的往返是指,某個(gè)運(yùn)算將原始浮點(diǎn)數(shù)轉(zhuǎn)換為另 一種格式,而反向運(yùn)算乂將轉(zhuǎn)換后的格式轉(zhuǎn)換回浮點(diǎn)數(shù),且最終浮點(diǎn)數(shù)與原始浮點(diǎn) 數(shù)相等。由于一個(gè)或多個(gè)最低有效位可能在轉(zhuǎn)換中丟失或更改,往返可能會(huì)失敗。4將浮點(diǎn)數(shù)表示為二進(jìn)制4.1無(wú)小數(shù)的浮點(diǎn)數(shù)轉(zhuǎn)換成二進(jìn)制表示首先,我們用一個(gè)不帶小數(shù)的浮點(diǎn)數(shù)來(lái)說明
7、如何將一個(gè)浮點(diǎn)數(shù)轉(zhuǎn)換成二進(jìn)制表示。 假設(shè)要轉(zhuǎn)換的數(shù)據(jù)是45678. Ofo在處理這種不帶小數(shù)的浮點(diǎn)數(shù)時(shí),直接將整數(shù)部分轉(zhuǎn)化為二進(jìn)制表示:0.0,這時(shí)要加上一位默認(rèn)的1 (這是因?yàn)榘凑崭↑c(diǎn)數(shù)規(guī)格化的要求,尾數(shù)必須化 成1.M的格式),那么可以表示成:10.0。然后將小數(shù)點(diǎn)向左移,一直移到離最高位只有1位,也就是1.0, 共移動(dòng)了 16 位,我們知道,左移位表示乘法,右移位表示除法。所以原數(shù)就等于這樣:1.0 * (216 )?,F(xiàn)在尾數(shù)和指數(shù)都出來(lái)了。因?yàn)樽罡呶坏?是根據(jù)標(biāo)準(zhǔn)加上去的,只是為了滿足規(guī)格化的要求,這時(shí)候需要把這個(gè)1去掉。尾數(shù)的二進(jìn)制就變成了: 0。最后在尾數(shù)的后面補(bǔ)0, 直到補(bǔ)夠23
8、位,就是:00000o再回來(lái)看指數(shù),根據(jù)前面的定義,P-127二16,那么P二143,表示成二進(jìn)制就是: lOOOllllo45678. Of這個(gè)數(shù)是正的,所以符號(hào)位是0,那么我們按照前面講的格式把它拼起 來(lái),就是:0 10001111 00000c這就是45678. Of這個(gè)數(shù)的二進(jìn)制表示,如果我們要得到16進(jìn)制的表示,非常簡(jiǎn) 單,我們只需要把這個(gè)二進(jìn)制串4個(gè)一組,轉(zhuǎn)換成16進(jìn)制數(shù)就可以了。但是要注 意的是x86架構(gòu)的CPU都是Little Endian的(也就是低位字節(jié)在前,高位字節(jié)在 后),所以在實(shí)際內(nèi)存中該數(shù)字是按上面二進(jìn)制串的倒序存儲(chǔ)的。要知道CPU是不 是little endian
9、的也很容易。BitConverter. IsLittleEndian;4.2含小數(shù)的浮點(diǎn)數(shù)表示為二進(jìn)制對(duì)于含小數(shù)的浮點(diǎn)數(shù),會(huì)有精度的問題,下面舉例說明。假設(shè)要轉(zhuǎn)換的小數(shù)為123. 456f o對(duì)于這種帶小數(shù)的就需要把整數(shù)部和小數(shù)部分開處理。對(duì)于整數(shù)部分的處理不再贅 述,直接化成二進(jìn)制為:100100011c小數(shù)部份的處理比較麻煩一些,我們知道, 使用二進(jìn)制表示只有0和1,那么對(duì)于小數(shù)就只能用下面的方式來(lái)表示:al*2l+a2*22+a3*2-3+an*2-n其中di等數(shù)可以是0或者1,從理論上將,使用這種表示方法可以表示一個(gè)有限 的小數(shù)。但是尾數(shù)只能有23位,那么就必然會(huì)帶來(lái)精度的問題。在很多
10、情況下,我們只能近似地表示小數(shù)。來(lái)看0.456這個(gè)十進(jìn)制純小數(shù),該如何 表示成二進(jìn)制呢? 一般說來(lái),我們可以通過乘以2的方法來(lái)表示。首先,把這個(gè)數(shù)字乘以2,小于1,所以第一位為0,然后再乘以2,大于1,所以 第二位為1,將這個(gè)數(shù)字減去1,再乘以2,這樣循環(huán)下去,直到這個(gè)數(shù)字等于0 為止。在很多情況下,我們得到的二進(jìn)制數(shù)字都大于23位,多于23位的就要舍去。舍入 原則是0舍1入。通過這樣的辦法,我們可以得到二進(jìn)制表示:1111011. Olo現(xiàn)在開始向左移小數(shù)點(diǎn),一共移了 6位,這時(shí)候尾數(shù)為:1.11001,階碼為6加上 127得131,二進(jìn)制表示為:10000101,那么總的二進(jìn)制表示為:0
11、10000101 11001表示成十六進(jìn)制是:42 F6 E9 79由于CPU是Little Endian的,所以在內(nèi)存中表示為:79 E9 F6 42。4. 3將純小數(shù)表示成二進(jìn)制對(duì)于純小數(shù)轉(zhuǎn)化為二進(jìn)制來(lái)說,必須先進(jìn)行規(guī)格化。例如0.0456,我們需要把它 規(guī)格化,變?yōu)?. xxxx * (2n )的形式,要求得純小數(shù)X對(duì)應(yīng)的n可用下面的公 式:n = int( 1 + log 2X )0. 0456我們可以表示為1. 4592乘以以2為底的-5次方的幕,即1. 4592 * ( 2-5 )。轉(zhuǎn)化為這樣形式后,再按照上面處理小數(shù)的方法處理,得到二進(jìn)制表示1. 10001去掉第一個(gè)1,得到尾數(shù)
12、10001階碼為:-5 + 127 = 122,二進(jìn)制表示為0 01111010 10001最后轉(zhuǎn)換成十六進(jìn)制11 C7 3A 3D5浮點(diǎn)數(shù)的數(shù)學(xué)運(yùn)算5. 1浮點(diǎn)數(shù)的加減法設(shè)兩個(gè)浮點(diǎn)數(shù)X二Mx*2Ex , Y=My*2Ey實(shí)現(xiàn)XY要用如下5步完成:(1)對(duì)階操作:小階向大階看齊(2)進(jìn)行尾數(shù)加減運(yùn)算(3)規(guī)格化處理:尾數(shù)進(jìn)行運(yùn)算的結(jié)果必須變成規(guī)格化的浮點(diǎn)數(shù),對(duì)于雙符號(hào)位(就是使用00表示正數(shù),11表示負(fù)數(shù),01表示上溢出,10表示下溢出)的補(bǔ)碼 尾數(shù)來(lái)說,就必須是001X X X-X X 或 11OX X X-X X 的形式若不符合上述形式要進(jìn)行左規(guī)或右規(guī)處理。(4)舍入操作:在執(zhí)行對(duì)階或右規(guī)
13、操作時(shí)常用“0”舍“1”入法將右移出去的尾 數(shù)數(shù)值進(jìn)行舍入,以確保精度。(5)判結(jié)果的正確性:即檢查階碼是否溢出若階碼下溢(移碼表示是00-0),要置結(jié)果為機(jī)器0;若階碼上溢(超過了階碼表示的最大值)置溢出標(biāo)志。現(xiàn)在用一個(gè)具體的例子來(lái)說明上面的5個(gè)步驟例題:假定X=0 .0110011*211, Y=0.1101101*2-10 (此處的數(shù)均為二進(jìn)制),計(jì)算 X+Y;首先,我們要把這兩個(gè)數(shù)變成2進(jìn)制表示,對(duì)于浮點(diǎn)數(shù)來(lái)說,階碼通常用移碼表 示,而尾數(shù)通常用補(bǔ)碼表示。要注意的是T0的移碼是00110X ?。?1 010 *Y?。?0 110 1101101符號(hào)位階碼尾數(shù)(1)求階差:| AE | =11010-0110 二0100(2)對(duì)階:Y的階碼小,Y的尾數(shù)右移4位Y浮變?yōu)? 1 010 * 1101暫時(shí)保存(3)尾數(shù)相加,采用雙符號(hào)位的補(bǔ)碼運(yùn)算00 1100110 +00 000011000 1101100(4)規(guī)格化:滿足規(guī)格化要求(5)舍入處理,采用0舍1入法處理故最終運(yùn)算結(jié)果的浮點(diǎn)數(shù)格式為:0 1 010 *即 X+Y二+0. 1101101*2105. 2浮點(diǎn)數(shù)的乘除法(1)階碼運(yùn)算:階碼求和(乘法)或階碼求差(除法)即Ex+Ey移二Ex移 + Ey補(bǔ)Ex-Ey移二Ex移 +-Ey補(bǔ)(2)浮點(diǎn)數(shù)的尾數(shù)處理:浮點(diǎn)數(shù)中尾數(shù)乘除法運(yùn)算結(jié)果要進(jìn)行舍入處理例題:X=0 .0110
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 強(qiáng)制拆房方案么
- 汛期河道船舶維護(hù)方案
- 時(shí)尚購(gòu)物中心攤位租賃經(jīng)營(yíng)協(xié)議
- 餐飲店員工勞動(dòng)合同(包含加班工資計(jì)算規(guī)定)
- 紀(jì)檢三員獎(jiǎng)勵(lì)方案
- 鋪磚安全考試題及答案
- 企業(yè)商學(xué)院培訓(xùn)課件
- 物理電學(xué)考試題及答案
- 南平學(xué)校面試題及答案
- 瓷磚倉(cāng)庫(kù)經(jīng)營(yíng)方案模板
- GB/T 21923-2008固體生物質(zhì)燃料檢驗(yàn)通則
- GB/T 18362-2008直燃型溴化鋰吸收式冷(溫)水機(jī)組
- 年產(chǎn)10萬(wàn)噸污水處理藥劑菌劑項(xiàng)目環(huán)評(píng)報(bào)告書
- 江蘇醫(yī)療機(jī)構(gòu)設(shè)置審批申請(qǐng)表
- 人教版二年級(jí)下冊(cè)《有余數(shù)的除法》教學(xué)設(shè)計(jì)公開課
- 某某醫(yī)院猴痘培訓(xùn)試題含答案
- (精選word)2019《普速鐵路線路修理規(guī)則》
- 高等教育心理學(xué)知識(shí)考核題庫(kù)與答案
- JTGT 3832-2018 公路工程預(yù)算定額 說明部分
- UPS基礎(chǔ)知識(shí)培訓(xùn)教材PPT(76張)課件
- 了凡四訓(xùn)-(課堂PPT)課件(PPT 33頁(yè))
評(píng)論
0/150
提交評(píng)論