浮點(diǎn)型數(shù)據(jù)的雙精度表示方法_第1頁(yè)
浮點(diǎn)型數(shù)據(jù)的雙精度表示方法_第2頁(yè)
浮點(diǎn)型數(shù)據(jù)的雙精度表示方法_第3頁(yè)
浮點(diǎn)型數(shù)據(jù)的雙精度表示方法_第4頁(yè)
全文預(yù)覽已結(jié)束

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

浮點(diǎn)型數(shù)據(jù)的雙精度表示方法

0浮點(diǎn)數(shù)值的生成ea754是執(zhí)行浮點(diǎn)數(shù)的最廣泛使用的標(biāo)準(zhǔn),使用各種cpu和浮點(diǎn)運(yùn)算器。這個(gè)標(biāo)準(zhǔn)定義了表示浮點(diǎn)數(shù)的格式(包括負(fù)零-0)與反常值(denormalnumber)、一些特殊數(shù)值(無(wú)窮與非數(shù)值(NaN))以及這些數(shù)值的“浮點(diǎn)數(shù)運(yùn)算子”。它規(guī)定了4種表示浮點(diǎn)數(shù)值的方式:單精確度(32位元)、雙精確度(64位元)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位元實(shí)做)。其中只有32位元模式有強(qiáng)制要求,其他都是選擇性的。BorlandC++Builder是最知名的可視化C++應(yīng)用程序開(kāi)發(fā)工具之一,它易學(xué)易用的操作界面和功能強(qiáng)大的應(yīng)用組件,可以讓程序員快速建立各種應(yīng)用程序。BorlandC++Builder不僅繼承了Delphi使用簡(jiǎn)便、功能強(qiáng)大、效率高等特點(diǎn),而且它還結(jié)合C++語(yǔ)言所有的優(yōu)點(diǎn)。C++Builder可以說(shuō)是至今最容易上手的Windows開(kāi)發(fā)工具。目前可視化編程中應(yīng)用IEEE處理整型數(shù)據(jù)到浮點(diǎn)型數(shù)據(jù)運(yùn)算的研究還很少,本文側(cè)重于實(shí)現(xiàn)將8位十六進(jìn)制的數(shù)據(jù)轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù),應(yīng)用于解析Modbus中RTU格式通信所獲得的浮點(diǎn)型數(shù)據(jù),并編寫(xiě)了上位機(jī)可視化軟件來(lái)顯示。1轉(zhuǎn)換算法的介紹1.1加快各時(shí)間點(diǎn)的添加浮點(diǎn)型數(shù)據(jù)保存的格式如表1所示。其中:S表示符號(hào)位;“1”表示負(fù)數(shù);“0”表示正數(shù);E代表偏移127的冪數(shù),二進(jìn)制階碼=(EEEEEEEE)-127;M代表24位的尾數(shù),存放在23個(gè)位中,只存儲(chǔ)23位,最高位固定為1,此方法用最少的位數(shù)實(shí)現(xiàn)了較高的有效位數(shù),提高了精度“0”是一個(gè)特定值,冪數(shù)是0,尾數(shù)也是0。1.2六進(jìn)制轉(zhuǎn)換為浮點(diǎn)數(shù)IEEE754標(biāo)準(zhǔn)中的浮點(diǎn)保存值不是一個(gè)直接的格式,要把十六進(jìn)制轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù),必須按照表1中所示的方式進(jìn)行分開(kāi)。這里又分為三種情況:(1)E部分不全為0也不全為1的情況;(2)E部分全部為0的情況;(3)E部分全部為1的情況。1.2.1實(shí)際樣品的編碼以0xC1420000為例,先把0xC1420000寫(xiě)成表1中所示形式,如下:由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼=(10000010)-127=3,也就是實(shí)際的冪數(shù)。尾數(shù)是后面的二進(jìn)制數(shù)10000100000000000000000,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒(méi)有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:110000100000000000000000則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:1.2.2x400bcoaf的實(shí)際應(yīng)用這是一種非規(guī)格化的數(shù)據(jù),此時(shí)k=1-(27-1)=-126,完整的位數(shù)部分為0MMMMMMMMM-MMMMMMMMMMMMMM。以0x800BCAEF為例,先把0x800BCAEF寫(xiě)成表1中所示形式,如下:由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼k=1-127=-126,也就是實(shí)際的冪數(shù)。尾數(shù)是后面的二進(jìn)制數(shù)00010111100101011101111,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒(méi)有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:100010111100101011101111,則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:1.2.3定義數(shù)的分析如果E部分全為1,則系數(shù)k=28-1=127,此時(shí)又分兩大類(lèi)情況:(1)尾數(shù)是0的情況,這類(lèi)情況下的數(shù)要么是正無(wú)窮大要么是負(fù)無(wú)窮大;(2)尾數(shù)不全為0的情況,根據(jù)IEEE754標(biāo)準(zhǔn),這類(lèi)情況是表示的一個(gè)沒(méi)有被定義的數(shù),也就是不存在這樣的數(shù)。結(jié)合以上三部分的分析可得出計(jì)算步驟如下:(1)先判斷十六進(jìn)制數(shù)的最高位是否為1:若為1則是負(fù)數(shù),若為0則是正數(shù);(2)把該數(shù)右移23位并和0xFF相與,得到二進(jìn)制數(shù)(EEEEEEEE);(3)把步驟(2)得到的二進(jìn)制數(shù)(EEEEEEEE)減127得到二進(jìn)制的最高位冪數(shù)(設(shè)為k);(4)把原數(shù)和0x7FFFFF相與得到不帶最高位的尾數(shù)(MMMMMMMMMMMMMMMMMMMMMMM),然后再把得到的尾數(shù)的最高數(shù)置“1”,即得到完整的尾數(shù):(1MMMMMMMMMMMMMMMMMMMMMMM);(5)在步驟(4)中得到的尾數(shù)的24位二進(jìn)制數(shù)乘以2k并相加即是所求浮點(diǎn)數(shù)2布局表面核心構(gòu)件的屬性打開(kāi)BorlandC++Builder6.0,在空白的Form1上放置5個(gè)Edit控件,2個(gè)Label控件,1個(gè)按鈕,布局Form上的控件并修改屬性,如圖1所示。軟件工作流程如圖2所示。3計(jì)算結(jié)果對(duì)比把前面舉例的數(shù)據(jù)0xC1420000進(jìn)行計(jì)算,計(jì)算結(jié)果如圖3所示??捎蓤D3看出計(jì)算結(jié)果和第1.2.1中計(jì)算結(jié)果一致。其次再把第1.2.2部分中所舉的數(shù)據(jù)用軟件進(jìn)行計(jì)算,結(jié)果如圖3所示。可由圖4看出,計(jì)算結(jié)果與第1.2.2部分中分析得出的結(jié)果一致。最后把第1.2.3部分中描述的情況用軟件實(shí)現(xiàn),結(jié)果如圖5所示。圖5顯示的是E部分全部為1且尾數(shù)部分不全為0的情況的計(jì)算結(jié)果。圖6上半部分顯示的是E部分全部為“1”且尾數(shù)部分全為“0”的一種計(jì)算。由于最高位為“1”,所以計(jì)算結(jié)果是負(fù)無(wú)窮大;下半部分是另外一種計(jì)算,由于最高位是“0”,所以計(jì)算結(jié)果是正無(wú)窮大。另外本文又仿真了一組Modbus協(xié)議中表示溫度的十六進(jìn)制數(shù)據(jù),轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù),仿真結(jié)果如圖7所示。4實(shí)驗(yàn)結(jié)果及分析為了驗(yàn)證仿真結(jié)果的正確性,本文編寫(xiě)了從浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)據(jù)的計(jì)算軟件,將之前的數(shù)據(jù)進(jìn)行一一驗(yàn)證,驗(yàn)證結(jié)果如圖8、圖9所示。為確保本文中計(jì)算軟件的無(wú)誤計(jì)算,本文在-1000~1000之間隨機(jī)取數(shù)進(jìn)行了大量的數(shù)據(jù)轉(zhuǎn)換計(jì)算實(shí)驗(yàn),并隨機(jī)記錄了10組數(shù)據(jù),如表2所示。由表2中數(shù)據(jù)仿真結(jié)果及其驗(yàn)證可以看出本文中所編寫(xiě)的轉(zhuǎn)換算法的精度是非常高的,能夠滿足高精度測(cè)量?jī)x器的數(shù)據(jù)轉(zhuǎn)換使用,而且可以看出小數(shù)點(diǎn)后保留的位數(shù)越多得出的結(jié)果越接近原始的數(shù)據(jù)。5基于浮點(diǎn)型數(shù)據(jù)的轉(zhuǎn)換編程利用BorlandC++Builder6.0編程開(kāi)發(fā)環(huán)境完成的十六進(jìn)制整型數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù)的軟件實(shí)現(xiàn)了從整型數(shù)據(jù)到浮點(diǎn)型數(shù)據(jù)的轉(zhuǎn)換計(jì)算,經(jīng)過(guò)二次開(kāi)發(fā)該軟件可被用于Modbus通信協(xié)議中高精度浮點(diǎn)型數(shù)據(jù)的傳輸打包、解析和顯示。另外,本文也完成了從浮點(diǎn)型數(shù)據(jù)到十

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論