亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于C++ Builder 6.0的IEEE 754中單精度浮點(diǎn)數(shù)轉(zhuǎn)換實(shí)現(xiàn)

        2014-10-14 17:37:10翟振輝
        現(xiàn)代電子技術(shù) 2014年20期
        關(guān)鍵詞:浮點(diǎn)尾數(shù)二進(jìn)制

        翟振輝

        摘 要: IEEE 754標(biāo)準(zhǔn)規(guī)定了可以精確表示某一浮點(diǎn)型數(shù)據(jù)的單精度(常用)和雙精度表示方法,這在許多對(duì)數(shù)據(jù)精度要求較高的場(chǎng)合得到廣泛應(yīng)用,而在數(shù)據(jù)通信過程中所有數(shù)據(jù)都是以十六進(jìn)制打包和解析、二進(jìn)制形式傳輸?shù)模匝芯咳绾胃鶕?jù)該標(biāo)準(zhǔn)把所要傳輸?shù)母↑c(diǎn)型數(shù)據(jù)編程轉(zhuǎn)換成8位十六進(jìn)制數(shù)據(jù)具有重要的實(shí)用意義。這里在分析和研究IEEE 754標(biāo)準(zhǔn)中浮點(diǎn)型數(shù)據(jù)單精度表示方式的基礎(chǔ)上,結(jié)合Borland C++Builder 6.0可視化編程工具,闡述了如何把單精度浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)換成所需要的8位十六進(jìn)制數(shù),以及如何把8位十六進(jìn)制數(shù)轉(zhuǎn)換成單精度浮點(diǎn)類型數(shù)據(jù),并實(shí)現(xiàn)顯示。

        關(guān)鍵詞: IEEE 754標(biāo)準(zhǔn); 十六進(jìn)制數(shù); 單精度浮點(diǎn)數(shù); 可視化編程工具

        中圖分類號(hào): TN911?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)20?0027?04

        Convert of floating?point data in IEEE754 based on C++ Builder6.0

        ZHAI Zhen?hui1, OU Shi?feng1, LIU Ji?zhang1, ZHONG Quan?xiong2, GAO Ying1

        (1. Institute of Optoelectronic Information, Yantai University, Yantai 264005, China; 2. Engineering Training Center, Yantai University, Yantai 264005, China)

        Abstract: The single precision and double precision expressive methods which can accurately express a float?point data are stipulated in IEEE754 standard. They are widely in the field, in which the accuracy requirement is high. On the base of studying and analyzing the expression of the 32 bits floating?point, how to translate the floating?point data to the needed hexadecimal data, and how to translate the hexadecimal data to the floating?point data are elaborated in combination with the visual programming tools Borland C++ Builder 6.0, and the expression of the 32 bits floating?point data in the IEEE 754 standard. The data display was realized.

        0 引 言

        IEEE 754是最廣泛使用的浮點(diǎn)數(shù)運(yùn)算標(biāo)準(zhǔn),為許多CPU與浮點(diǎn)運(yùn)算器所采用[1]。這個(gè)標(biāo)準(zhǔn)定義了表示浮點(diǎn)數(shù)的格式(包括負(fù)零-0)與反常值(denormal number)、一些特殊數(shù)值(無(wú)窮與非數(shù)值(NaN))以及這些數(shù)值的“浮點(diǎn)數(shù)運(yùn)算子”。它規(guī)定了4種表示浮點(diǎn)數(shù)值的方式:?jiǎn)尉_度(32位元)、雙精確度(64位元)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位元實(shí)做)。其中只有32位元模式有強(qiáng)制要求,其他都是選擇性的[2]。

        Borland C++ Builder是最知名的可視化C++應(yīng)用程序開發(fā)工具之一,它易學(xué)易用的操作界面和功能強(qiáng)大的應(yīng)用組件,可以讓程序員快速建立各種應(yīng)用程序[3]。Borland C++ Builder不僅繼承了Delphi使用簡(jiǎn)便、功能強(qiáng)大、效率高等特點(diǎn),而且它還結(jié)合C++語(yǔ)言所有的優(yōu)點(diǎn)。C++ Builder可以說(shuō)是至今最容易上手的Windows開發(fā)工具[4]。

        目前可視化編程中應(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格式[5]通信所獲得的浮點(diǎn)型數(shù)據(jù),并編寫了上位機(jī)可視化軟件來(lái)顯示。

        1 轉(zhuǎn)換算法介紹

        1.1 浮點(diǎn)數(shù)保存格式

        浮點(diǎn)型數(shù)據(jù)保存的格式[1]如表1所示。其中:S表示符號(hào)位;“1”表示負(fù)數(shù);“0”表示正數(shù);E代表偏移127的冪數(shù),二進(jìn)制階碼 =(EEEE EEEE)-127;M代表24位的尾數(shù),存放在23個(gè)位中,只存儲(chǔ)23位,最高位固定為1,此方法用最少的位數(shù)實(shí)現(xiàn)了較高的有效位數(shù),提高了精度“0”是一個(gè)特定值,冪數(shù)是0,尾數(shù)也是0。

        表1 浮點(diǎn)型數(shù)據(jù)保存的格式

        1.2 十六進(jìn)制數(shù)轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù)

        IEEE 754標(biāo)準(zhǔn)中的浮點(diǎn)保存值不是一個(gè)直接的格式,要把十六進(jìn)制轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù),必須按照表1中所示的方式進(jìn)行分開。這里又分為三種情況:

        (1) E部分不全為0也不全為1的情況;

        (2) E部分全部為0的情況;

        (3) E部分全部為1的情況。

        1.2.1 E部分不全為0也不全為1

        以0xC1420000為例,先把0xC1420000寫成表1中所示形式,如下:

        SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

        1100 0001 0100 0010 0000 0000 0000 0000

        由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼=(1000 0010)-127 = 3,也就是實(shí)際的冪數(shù)。尾數(shù)是后面的二進(jìn)制數(shù)100 0010 0000 0000 0000 0000,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:1100 0010 0000 0000 0000 0000則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:

        [2k×i=023M×2i-23=-12.25] (1)

        1.2.2 E部分全為0

        這是一種非規(guī)格化的數(shù)據(jù),此時(shí)k=1-(27-1)=-126,完整的位數(shù)部分為0MMM MMMM MMMM MMMM MMMM MMMM。以0x800BCAEF為例,先把0x800BCAEF寫成表1中所示形式,如下:

        SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

        1000 0000 0000 1011 1100 1010 1110 1111

        由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼k=1-127 =-126,也就是實(shí)際的冪數(shù)。

        尾數(shù)是后面的二進(jìn)制數(shù)000 1011 1100 1010 1110 1111,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:1000 1011 1100 1010 1110 1111,則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:[2k×i=023M×2i-23=-1.082 989 314 25e-39] (2)

        1.2.3 E部分全部為1

        如果E部分全為1,則系數(shù)k=28-1=127,此時(shí)又分兩大類情況:

        (1) 尾數(shù)是0的情況,這類情況下的數(shù)要么是正無(wú)窮大要么是負(fù)無(wú)窮大;

        (2) 尾數(shù)不全為0的情況,根據(jù)IEEE 754標(biāo)準(zhǔn),這類情況是表示的一個(gè)沒有被定義的數(shù),也就是不存在這樣的數(shù)。

        結(jié)合以上三部分的分析可得出計(jì)算步驟如下:

        (1) 先判斷十六進(jìn)制數(shù)的最高位是否為1:若為1則是負(fù)數(shù),若為0則是正數(shù);

        (2) 把該數(shù)右移23位并和0xFF相與,得到二進(jìn)制數(shù)(EEEE EEEE);

        (3) 把步驟(2)得到的二進(jìn)制數(shù)(EEEE EEEE)減127得到二進(jìn)制的最高位冪數(shù)(設(shè)為k);

        (4) 把原數(shù)和0x7FFFFF相與得到不帶最高位的尾數(shù)(MMM MMMM MMMM MMMM MMMM MMMM),然后再把得到的尾數(shù)的最高數(shù)置“1”,即得到完整的尾數(shù):(1MMM MMMM MMMM MMMM MMMM MMMM);

        (5) 在步驟(4)中得到的尾數(shù)的24位二進(jìn)制數(shù)乘以2k并相加即是所求浮點(diǎn)數(shù)

        2 編程實(shí)現(xiàn)

        打開Borland C++ Builder 6.0,在空白的Form1上放置5個(gè)Edit控件,2個(gè)Label控件,1個(gè)按鈕,布局Form上的控件并修改屬性[3],如圖1所示。

        圖1 軟件設(shè)計(jì)界面

        軟件工作流程如圖2所示。

        3 仿真結(jié)果

        把前面舉例的數(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é)果。

        圖3 E部分不全為0也不全為1數(shù)據(jù)計(jì)算結(jié)果

        圖4 E部分全為0數(shù)據(jù)計(jì)算結(jié)果

        圖5 E部分全為1且尾數(shù)部分不全為0的數(shù)據(jù)計(jì)算

        圖6上半部分顯示的是E部分全部為“1”且尾數(shù)部分全為“0”的一種計(jì)算。由于最高位為“1”,所以計(jì)算結(jié)果是負(fù)無(wú)窮大;下半部分是另外一種計(jì)算,由于最高位是“0”,所以計(jì)算結(jié)果是正無(wú)窮大。

        圖6 E部分全為1且尾數(shù)部分全為0的計(jì)算

        另外本文又仿真了一組Modbus協(xié)議中表示溫度的十六進(jìn)制數(shù)據(jù),轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù),仿真結(jié)果如圖7所示。

        圖7 溫度數(shù)據(jù)仿真結(jié)果

        4 仿真結(jié)果驗(yàn)證

        為了驗(yàn)證仿真結(jié)果的正確性,本文編寫了從浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)據(jù)的計(jì)算軟件,將之前的數(shù)據(jù)進(jìn)行一一驗(yàn)證,驗(yàn)證結(jié)果如圖8、圖9所示。

        圖8 數(shù)據(jù)仿真結(jié)果驗(yàn)證

        圖9 溫度數(shù)據(jù)仿真結(jié)果驗(yàn)證

        為確保本文中計(jì)算軟件的無(wú)誤計(jì)算,本文在-1 000~1 000之間隨機(jī)取數(shù)進(jìn)行了大量的數(shù)據(jù)轉(zhuǎn)換計(jì)算實(shí)驗(yàn),并隨機(jī)記錄了10組數(shù)據(jù),如表2所示。

        由表2中數(shù)據(jù)仿真結(jié)果及其驗(yàn)證可以看出本文中所編寫的轉(zhuǎn)換算法的精度是非常高的,能夠滿足高精度測(cè)量?jī)x器的數(shù)據(jù)轉(zhuǎn)換使用,而且可以看出小數(shù)點(diǎn)后保留的位數(shù)越多得出的結(jié)果越接近原始的數(shù)據(jù)。

        5 結(jié) 論

        利用Borland C++Builder 6.0編程開發(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)過二次開發(fā)該軟件可被用于Modbus通信協(xié)議中高精度浮點(diǎn)型數(shù)據(jù)的傳輸打包、解析和顯示。另外,本文也完成了從浮點(diǎn)型數(shù)據(jù)到十六進(jìn)制整型數(shù)據(jù)的轉(zhuǎn)換編程及仿真顯示。

        參考文獻(xiàn)

        [1] Microprocessor Standards Committee of the IEEE Computer Society. IEEE Std754?1985 IEEE standard for floating?point arithmetic [S]. USA: Microprocessor Standards Committee of the IEEE Computer Society, 1985.

        [2] 程展鵬.Borland C++ Builder 6 應(yīng)用開發(fā)技術(shù)解析[M].北京:清華大學(xué)出版社,2003.

        [3] 譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].4版.北京:清華大學(xué)出版社,2010.

        [4] 吳逸賢,吳目成.精彩C++ Builder 6程序設(shè)計(jì)[M].北京:科學(xué)出版社,2003.

        [5] 全國(guó)工業(yè)過程測(cè)量和控制標(biāo)準(zhǔn)化技術(shù)委員會(huì).GB/T19582?2008 Modbus通信協(xié)議[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2008.

        [6] 陳鵬,蔡雪梅.NIOS浮點(diǎn)運(yùn)算定制指令的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(10):166?168.

        [7] 唐小明,張濤,王貞杰,等.一種新的基于FPGA的數(shù)據(jù)格式轉(zhuǎn)換方法[J].現(xiàn)代電子技術(shù),2011,34(16):110?112.

        [8] 謝躍雷,陳敏.粒子濾波算法中浮點(diǎn)指數(shù)函數(shù)的FPGA設(shè)計(jì)實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,31(18):119?121.

        Keywords: IEEE 754 standard; hexadecimal number; floating?point data with single precision; visual programming tool

        由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼=(1000 0010)-127 = 3,也就是實(shí)際的冪數(shù)。尾數(shù)是后面的二進(jìn)制數(shù)100 0010 0000 0000 0000 0000,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:1100 0010 0000 0000 0000 0000則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:

        [2k×i=023M×2i-23=-12.25] (1)

        1.2.2 E部分全為0

        這是一種非規(guī)格化的數(shù)據(jù),此時(shí)k=1-(27-1)=-126,完整的位數(shù)部分為0MMM MMMM MMMM MMMM MMMM MMMM。以0x800BCAEF為例,先把0x800BCAEF寫成表1中所示形式,如下:

        SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

        1000 0000 0000 1011 1100 1010 1110 1111

        由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼k=1-127 =-126,也就是實(shí)際的冪數(shù)。

        尾數(shù)是后面的二進(jìn)制數(shù)000 1011 1100 1010 1110 1111,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:1000 1011 1100 1010 1110 1111,則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:[2k×i=023M×2i-23=-1.082 989 314 25e-39] (2)

        1.2.3 E部分全部為1

        如果E部分全為1,則系數(shù)k=28-1=127,此時(shí)又分兩大類情況:

        (1) 尾數(shù)是0的情況,這類情況下的數(shù)要么是正無(wú)窮大要么是負(fù)無(wú)窮大;

        (2) 尾數(shù)不全為0的情況,根據(jù)IEEE 754標(biāo)準(zhǔn),這類情況是表示的一個(gè)沒有被定義的數(shù),也就是不存在這樣的數(shù)。

        結(jié)合以上三部分的分析可得出計(jì)算步驟如下:

        (1) 先判斷十六進(jìn)制數(shù)的最高位是否為1:若為1則是負(fù)數(shù),若為0則是正數(shù);

        (2) 把該數(shù)右移23位并和0xFF相與,得到二進(jìn)制數(shù)(EEEE EEEE);

        (3) 把步驟(2)得到的二進(jìn)制數(shù)(EEEE EEEE)減127得到二進(jìn)制的最高位冪數(shù)(設(shè)為k);

        (4) 把原數(shù)和0x7FFFFF相與得到不帶最高位的尾數(shù)(MMM MMMM MMMM MMMM MMMM MMMM),然后再把得到的尾數(shù)的最高數(shù)置“1”,即得到完整的尾數(shù):(1MMM MMMM MMMM MMMM MMMM MMMM);

        (5) 在步驟(4)中得到的尾數(shù)的24位二進(jìn)制數(shù)乘以2k并相加即是所求浮點(diǎn)數(shù)

        2 編程實(shí)現(xiàn)

        打開Borland C++ Builder 6.0,在空白的Form1上放置5個(gè)Edit控件,2個(gè)Label控件,1個(gè)按鈕,布局Form上的控件并修改屬性[3],如圖1所示。

        圖1 軟件設(shè)計(jì)界面

        軟件工作流程如圖2所示。

        3 仿真結(jié)果

        把前面舉例的數(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é)果。

        圖3 E部分不全為0也不全為1數(shù)據(jù)計(jì)算結(jié)果

        圖4 E部分全為0數(shù)據(jù)計(jì)算結(jié)果

        圖5 E部分全為1且尾數(shù)部分不全為0的數(shù)據(jù)計(jì)算

        圖6上半部分顯示的是E部分全部為“1”且尾數(shù)部分全為“0”的一種計(jì)算。由于最高位為“1”,所以計(jì)算結(jié)果是負(fù)無(wú)窮大;下半部分是另外一種計(jì)算,由于最高位是“0”,所以計(jì)算結(jié)果是正無(wú)窮大。

        圖6 E部分全為1且尾數(shù)部分全為0的計(jì)算

        另外本文又仿真了一組Modbus協(xié)議中表示溫度的十六進(jìn)制數(shù)據(jù),轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù),仿真結(jié)果如圖7所示。

        圖7 溫度數(shù)據(jù)仿真結(jié)果

        4 仿真結(jié)果驗(yàn)證

        為了驗(yàn)證仿真結(jié)果的正確性,本文編寫了從浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)據(jù)的計(jì)算軟件,將之前的數(shù)據(jù)進(jìn)行一一驗(yàn)證,驗(yàn)證結(jié)果如圖8、圖9所示。

        圖8 數(shù)據(jù)仿真結(jié)果驗(yàn)證

        圖9 溫度數(shù)據(jù)仿真結(jié)果驗(yàn)證

        為確保本文中計(jì)算軟件的無(wú)誤計(jì)算,本文在-1 000~1 000之間隨機(jī)取數(shù)進(jìn)行了大量的數(shù)據(jù)轉(zhuǎn)換計(jì)算實(shí)驗(yàn),并隨機(jī)記錄了10組數(shù)據(jù),如表2所示。

        由表2中數(shù)據(jù)仿真結(jié)果及其驗(yàn)證可以看出本文中所編寫的轉(zhuǎn)換算法的精度是非常高的,能夠滿足高精度測(cè)量?jī)x器的數(shù)據(jù)轉(zhuǎn)換使用,而且可以看出小數(shù)點(diǎn)后保留的位數(shù)越多得出的結(jié)果越接近原始的數(shù)據(jù)。

        5 結(jié) 論

        利用Borland C++Builder 6.0編程開發(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)過二次開發(fā)該軟件可被用于Modbus通信協(xié)議中高精度浮點(diǎn)型數(shù)據(jù)的傳輸打包、解析和顯示。另外,本文也完成了從浮點(diǎn)型數(shù)據(jù)到十六進(jìn)制整型數(shù)據(jù)的轉(zhuǎn)換編程及仿真顯示。

        參考文獻(xiàn)

        [1] Microprocessor Standards Committee of the IEEE Computer Society. IEEE Std754?1985 IEEE standard for floating?point arithmetic [S]. USA: Microprocessor Standards Committee of the IEEE Computer Society, 1985.

        [2] 程展鵬.Borland C++ Builder 6 應(yīng)用開發(fā)技術(shù)解析[M].北京:清華大學(xué)出版社,2003.

        [3] 譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].4版.北京:清華大學(xué)出版社,2010.

        [4] 吳逸賢,吳目成.精彩C++ Builder 6程序設(shè)計(jì)[M].北京:科學(xué)出版社,2003.

        [5] 全國(guó)工業(yè)過程測(cè)量和控制標(biāo)準(zhǔn)化技術(shù)委員會(huì).GB/T19582?2008 Modbus通信協(xié)議[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2008.

        [6] 陳鵬,蔡雪梅.NIOS浮點(diǎn)運(yùn)算定制指令的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(10):166?168.

        [7] 唐小明,張濤,王貞杰,等.一種新的基于FPGA的數(shù)據(jù)格式轉(zhuǎn)換方法[J].現(xiàn)代電子技術(shù),2011,34(16):110?112.

        [8] 謝躍雷,陳敏.粒子濾波算法中浮點(diǎn)指數(shù)函數(shù)的FPGA設(shè)計(jì)實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,31(18):119?121.

        Keywords: IEEE 754 standard; hexadecimal number; floating?point data with single precision; visual programming tool

        由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼=(1000 0010)-127 = 3,也就是實(shí)際的冪數(shù)。尾數(shù)是后面的二進(jìn)制數(shù)100 0010 0000 0000 0000 0000,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:1100 0010 0000 0000 0000 0000則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:

        [2k×i=023M×2i-23=-12.25] (1)

        1.2.2 E部分全為0

        這是一種非規(guī)格化的數(shù)據(jù),此時(shí)k=1-(27-1)=-126,完整的位數(shù)部分為0MMM MMMM MMMM MMMM MMMM MMMM。以0x800BCAEF為例,先把0x800BCAEF寫成表1中所示形式,如下:

        SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

        1000 0000 0000 1011 1100 1010 1110 1111

        由上可以看出,此數(shù)是一個(gè)負(fù)數(shù),二進(jìn)制階碼k=1-127 =-126,也就是實(shí)際的冪數(shù)。

        尾數(shù)是后面的二進(jìn)制數(shù)000 1011 1100 1010 1110 1111,這是已存儲(chǔ)的23位二進(jìn)制,還有一位沒有被存儲(chǔ)的最高位,固定為1,所以整個(gè)尾數(shù)即:1000 1011 1100 1010 1110 1111,則根據(jù)實(shí)際的冪數(shù),浮點(diǎn)型數(shù)為:[2k×i=023M×2i-23=-1.082 989 314 25e-39] (2)

        1.2.3 E部分全部為1

        如果E部分全為1,則系數(shù)k=28-1=127,此時(shí)又分兩大類情況:

        (1) 尾數(shù)是0的情況,這類情況下的數(shù)要么是正無(wú)窮大要么是負(fù)無(wú)窮大;

        (2) 尾數(shù)不全為0的情況,根據(jù)IEEE 754標(biāo)準(zhǔn),這類情況是表示的一個(gè)沒有被定義的數(shù),也就是不存在這樣的數(shù)。

        結(jié)合以上三部分的分析可得出計(jì)算步驟如下:

        (1) 先判斷十六進(jìn)制數(shù)的最高位是否為1:若為1則是負(fù)數(shù),若為0則是正數(shù);

        (2) 把該數(shù)右移23位并和0xFF相與,得到二進(jìn)制數(shù)(EEEE EEEE);

        (3) 把步驟(2)得到的二進(jìn)制數(shù)(EEEE EEEE)減127得到二進(jìn)制的最高位冪數(shù)(設(shè)為k);

        (4) 把原數(shù)和0x7FFFFF相與得到不帶最高位的尾數(shù)(MMM MMMM MMMM MMMM MMMM MMMM),然后再把得到的尾數(shù)的最高數(shù)置“1”,即得到完整的尾數(shù):(1MMM MMMM MMMM MMMM MMMM MMMM);

        (5) 在步驟(4)中得到的尾數(shù)的24位二進(jìn)制數(shù)乘以2k并相加即是所求浮點(diǎn)數(shù)

        2 編程實(shí)現(xiàn)

        打開Borland C++ Builder 6.0,在空白的Form1上放置5個(gè)Edit控件,2個(gè)Label控件,1個(gè)按鈕,布局Form上的控件并修改屬性[3],如圖1所示。

        圖1 軟件設(shè)計(jì)界面

        軟件工作流程如圖2所示。

        3 仿真結(jié)果

        把前面舉例的數(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é)果。

        圖3 E部分不全為0也不全為1數(shù)據(jù)計(jì)算結(jié)果

        圖4 E部分全為0數(shù)據(jù)計(jì)算結(jié)果

        圖5 E部分全為1且尾數(shù)部分不全為0的數(shù)據(jù)計(jì)算

        圖6上半部分顯示的是E部分全部為“1”且尾數(shù)部分全為“0”的一種計(jì)算。由于最高位為“1”,所以計(jì)算結(jié)果是負(fù)無(wú)窮大;下半部分是另外一種計(jì)算,由于最高位是“0”,所以計(jì)算結(jié)果是正無(wú)窮大。

        圖6 E部分全為1且尾數(shù)部分全為0的計(jì)算

        另外本文又仿真了一組Modbus協(xié)議中表示溫度的十六進(jìn)制數(shù)據(jù),轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù),仿真結(jié)果如圖7所示。

        圖7 溫度數(shù)據(jù)仿真結(jié)果

        4 仿真結(jié)果驗(yàn)證

        為了驗(yàn)證仿真結(jié)果的正確性,本文編寫了從浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)據(jù)的計(jì)算軟件,將之前的數(shù)據(jù)進(jìn)行一一驗(yàn)證,驗(yàn)證結(jié)果如圖8、圖9所示。

        圖8 數(shù)據(jù)仿真結(jié)果驗(yàn)證

        圖9 溫度數(shù)據(jù)仿真結(jié)果驗(yàn)證

        為確保本文中計(jì)算軟件的無(wú)誤計(jì)算,本文在-1 000~1 000之間隨機(jī)取數(shù)進(jìn)行了大量的數(shù)據(jù)轉(zhuǎn)換計(jì)算實(shí)驗(yàn),并隨機(jī)記錄了10組數(shù)據(jù),如表2所示。

        由表2中數(shù)據(jù)仿真結(jié)果及其驗(yàn)證可以看出本文中所編寫的轉(zhuǎn)換算法的精度是非常高的,能夠滿足高精度測(cè)量?jī)x器的數(shù)據(jù)轉(zhuǎn)換使用,而且可以看出小數(shù)點(diǎn)后保留的位數(shù)越多得出的結(jié)果越接近原始的數(shù)據(jù)。

        5 結(jié) 論

        利用Borland C++Builder 6.0編程開發(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)過二次開發(fā)該軟件可被用于Modbus通信協(xié)議中高精度浮點(diǎn)型數(shù)據(jù)的傳輸打包、解析和顯示。另外,本文也完成了從浮點(diǎn)型數(shù)據(jù)到十六進(jìn)制整型數(shù)據(jù)的轉(zhuǎn)換編程及仿真顯示。

        參考文獻(xiàn)

        [1] Microprocessor Standards Committee of the IEEE Computer Society. IEEE Std754?1985 IEEE standard for floating?point arithmetic [S]. USA: Microprocessor Standards Committee of the IEEE Computer Society, 1985.

        [2] 程展鵬.Borland C++ Builder 6 應(yīng)用開發(fā)技術(shù)解析[M].北京:清華大學(xué)出版社,2003.

        [3] 譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].4版.北京:清華大學(xué)出版社,2010.

        [4] 吳逸賢,吳目成.精彩C++ Builder 6程序設(shè)計(jì)[M].北京:科學(xué)出版社,2003.

        [5] 全國(guó)工業(yè)過程測(cè)量和控制標(biāo)準(zhǔn)化技術(shù)委員會(huì).GB/T19582?2008 Modbus通信協(xié)議[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2008.

        [6] 陳鵬,蔡雪梅.NIOS浮點(diǎn)運(yùn)算定制指令的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(10):166?168.

        [7] 唐小明,張濤,王貞杰,等.一種新的基于FPGA的數(shù)據(jù)格式轉(zhuǎn)換方法[J].現(xiàn)代電子技術(shù),2011,34(16):110?112.

        [8] 謝躍雷,陳敏.粒子濾波算法中浮點(diǎn)指數(shù)函數(shù)的FPGA設(shè)計(jì)實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,31(18):119?121.

        Keywords: IEEE 754 standard; hexadecimal number; floating?point data with single precision; visual programming tool

        猜你喜歡
        浮點(diǎn)尾數(shù)二進(jìn)制
        “改寫”與“省略”三不同
        LEO星座增強(qiáng)GNSS PPP模糊度浮點(diǎn)解與固定解性能評(píng)估
        用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
        連續(xù)自然數(shù)及乘積的尾數(shù)和奇偶性的分析
        有趣的進(jìn)度
        基于浮點(diǎn)DSP的鐵路FSK信號(hào)檢測(cè)
        2019年度下半年《啟迪與智慧》上下半月刊、《幽默與笑話》上下半月刊、《拳擊與格斗》上半月刊抽大獎(jiǎng)中獎(jiǎng)結(jié)果
        二進(jìn)制在競(jìng)賽題中的應(yīng)用
        基于FPGA的浮點(diǎn)FIR濾波器設(shè)計(jì)
        改進(jìn)的Goldschmidt雙精度浮點(diǎn)除法器
        欧美激情国产亚州一区二区| 久久久精品人妻一区二区三区四区| 国产内射一级一片内射视频| 午夜福利理论片在线观看| 亚洲欧美日韩人成在线播放| 传媒在线无码| 久久久精品人妻一区二| 国产丝袜一区丝袜高跟美腿| 亚洲悠悠色综合中文字幕| 狠狠人妻久久久久久综合蜜桃| 内射无码专区久久亚洲| 国产妇女乱一性一交| 亚洲中国美女精品久久久| 91色区在线免费观看国产 | 青春草在线视频观看| 日本一曲二曲三曲在线| 午夜精品免费视频一区二区三区 | 亚洲精品综合一区二区三| 中出高潮了中文字幕| 国产精品天堂在线观看| 国语对白福利在线观看| 国产乱人激情h在线观看| 国产精品 高清 尿 小便 嘘嘘 | 亚洲av综合久久九九| 中文字幕精品久久天堂一区| 午夜亚洲精品视频网站| 91精品人妻一区二区三区久久久| 亚洲av无码国产精品草莓在线| 亚洲精品久久久久中文字幕二区| 91尤物在线看| 亚洲一区二区综合精品| 日本一区二区三区爆乳| 先锋影音av最新资源| 蜜桃一区二区三区在线看| 青青草视频在线观看9| 你懂的视频网站亚洲视频| 大陆国产乱人伦| 特级婬片国产高清视频| 久久精品无码一区二区三区不卡| 国产精品美女一区二区av| 国产女人好紧好爽|