国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

翟振輝

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

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

中圖分類號: TN911?34 文獻標(biāo)識碼: A 文章編號: 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是最廣泛使用的浮點數(shù)運算標(biāo)準(zhǔn),為許多CPU與浮點運算器所采用[1]。這個標(biāo)準(zhǔn)定義了表示浮點數(shù)的格式(包括負零-0)與反常值(denormal number)、一些特殊數(shù)值(無窮與非數(shù)值(NaN))以及這些數(shù)值的“浮點數(shù)運算子”。它規(guī)定了4種表示浮點數(shù)值的方式:單精確度(32位元)、雙精確度(64位元)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位元實做)。其中只有32位元模式有強制要求,其他都是選擇性的[2]。

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

目前可視化編程中應(yīng)用IEEE處理整型數(shù)據(jù)到浮點型數(shù)據(jù)運算的研究還很少,本文側(cè)重于實現(xiàn)將8位十六進制的數(shù)據(jù)轉(zhuǎn)換成浮點型數(shù)據(jù),應(yīng)用于解析Modbus中RTU格式[5]通信所獲得的浮點型數(shù)據(jù),并編寫了上位機可視化軟件來顯示。

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

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

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

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

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

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

(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ù)是一個負數(shù),二進制階碼=(1000 0010)-127 = 3,也就是實際的冪數(shù)。尾數(shù)是后面的二進制數(shù)100 0010 0000 0000 0000 0000,這是已存儲的23位二進制,還有一位沒有被存儲的最高位,固定為1,所以整個尾數(shù)即:1100 0010 0000 0000 0000 0000則根據(jù)實際的冪數(shù),浮點型數(shù)為:

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

1.2.2 E部分全為0

這是一種非規(guī)格化的數(shù)據(jù),此時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ù)是一個負數(shù),二進制階碼k=1-127 =-126,也就是實際的冪數(shù)。

尾數(shù)是后面的二進制數(shù)000 1011 1100 1010 1110 1111,這是已存儲的23位二進制,還有一位沒有被存儲的最高位,固定為1,所以整個尾數(shù)即:1000 1011 1100 1010 1110 1111,則根據(jù)實際的冪數(shù),浮點型數(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,此時又分兩大類情況:

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

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

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

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

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

(3) 把步驟(2)得到的二進制數(shù)(EEEE EEEE)減127得到二進制的最高位冪數(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位二進制數(shù)乘以2k并相加即是所求浮點數(shù)

2 編程實現(xiàn)

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

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

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

3 仿真結(jié)果

把前面舉例的數(shù)據(jù)0xC1420000進行計算,計算結(jié)果如圖3所示。可由圖3看出計算結(jié)果和第1.2.1中計算結(jié)果一致。

其次再把第1.2.2部分中所舉的數(shù)據(jù)用軟件進行計算,結(jié)果如圖3所示。

可由圖4看出,計算結(jié)果與第1.2.2部分中分析得出的結(jié)果一致。最后把第1.2.3部分中描述的情況用軟件實現(xiàn),結(jié)果如圖5所示。

圖5顯示的是E部分全部為1且尾數(shù)部分不全為0的情況的計算結(jié)果。

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

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

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

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

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

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

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

4 仿真結(jié)果驗證

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

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

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

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

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

5 結(jié) 論

利用Borland C++Builder 6.0編程開發(fā)環(huán)境完成的十六進制整型數(shù)據(jù)轉(zhuǎn)換為浮點型數(shù)據(jù)的軟件實現(xiàn)了從整型數(shù)據(jù)到浮點型數(shù)據(jù)的轉(zhuǎn)換計算,經(jīng)過二次開發(fā)該軟件可被用于Modbus通信協(xié)議中高精度浮點型數(shù)據(jù)的傳輸打包、解析和顯示。另外,本文也完成了從浮點型數(shù)據(jù)到十六進制整型數(shù)據(jù)的轉(zhuǎ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] 譚浩強.C語言程序設(shè)計[M].4版.北京:清華大學(xué)出版社,2010.

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

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

[6] 陳鵬,蔡雪梅.NIOS浮點運算定制指令的實現(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] 謝躍雷,陳敏.粒子濾波算法中浮點指數(shù)函數(shù)的FPGA設(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ù)是一個負數(shù),二進制階碼=(1000 0010)-127 = 3,也就是實際的冪數(shù)。尾數(shù)是后面的二進制數(shù)100 0010 0000 0000 0000 0000,這是已存儲的23位二進制,還有一位沒有被存儲的最高位,固定為1,所以整個尾數(shù)即:1100 0010 0000 0000 0000 0000則根據(jù)實際的冪數(shù),浮點型數(shù)為:

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

1.2.2 E部分全為0

這是一種非規(guī)格化的數(shù)據(jù),此時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ù)是一個負數(shù),二進制階碼k=1-127 =-126,也就是實際的冪數(shù)。

尾數(shù)是后面的二進制數(shù)000 1011 1100 1010 1110 1111,這是已存儲的23位二進制,還有一位沒有被存儲的最高位,固定為1,所以整個尾數(shù)即:1000 1011 1100 1010 1110 1111,則根據(jù)實際的冪數(shù),浮點型數(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,此時又分兩大類情況:

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

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

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

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

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

(3) 把步驟(2)得到的二進制數(shù)(EEEE EEEE)減127得到二進制的最高位冪數(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位二進制數(shù)乘以2k并相加即是所求浮點數(shù)

2 編程實現(xiàn)

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

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

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

3 仿真結(jié)果

把前面舉例的數(shù)據(jù)0xC1420000進行計算,計算結(jié)果如圖3所示??捎蓤D3看出計算結(jié)果和第1.2.1中計算結(jié)果一致。

其次再把第1.2.2部分中所舉的數(shù)據(jù)用軟件進行計算,結(jié)果如圖3所示。

可由圖4看出,計算結(jié)果與第1.2.2部分中分析得出的結(jié)果一致。最后把第1.2.3部分中描述的情況用軟件實現(xiàn),結(jié)果如圖5所示。

圖5顯示的是E部分全部為1且尾數(shù)部分不全為0的情況的計算結(jié)果。

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

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

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

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

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

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

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

4 仿真結(jié)果驗證

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

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

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

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

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

5 結(jié) 論

利用Borland C++Builder 6.0編程開發(fā)環(huán)境完成的十六進制整型數(shù)據(jù)轉(zhuǎn)換為浮點型數(shù)據(jù)的軟件實現(xiàn)了從整型數(shù)據(jù)到浮點型數(shù)據(jù)的轉(zhuǎn)換計算,經(jīng)過二次開發(fā)該軟件可被用于Modbus通信協(xié)議中高精度浮點型數(shù)據(jù)的傳輸打包、解析和顯示。另外,本文也完成了從浮點型數(shù)據(jù)到十六進制整型數(shù)據(jù)的轉(zhuǎ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] 譚浩強.C語言程序設(shè)計[M].4版.北京:清華大學(xué)出版社,2010.

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

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

[6] 陳鵬,蔡雪梅.NIOS浮點運算定制指令的實現(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] 謝躍雷,陳敏.粒子濾波算法中浮點指數(shù)函數(shù)的FPGA設(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ù)是一個負數(shù),二進制階碼=(1000 0010)-127 = 3,也就是實際的冪數(shù)。尾數(shù)是后面的二進制數(shù)100 0010 0000 0000 0000 0000,這是已存儲的23位二進制,還有一位沒有被存儲的最高位,固定為1,所以整個尾數(shù)即:1100 0010 0000 0000 0000 0000則根據(jù)實際的冪數(shù),浮點型數(shù)為:

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

1.2.2 E部分全為0

這是一種非規(guī)格化的數(shù)據(jù),此時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ù)是一個負數(shù),二進制階碼k=1-127 =-126,也就是實際的冪數(shù)。

尾數(shù)是后面的二進制數(shù)000 1011 1100 1010 1110 1111,這是已存儲的23位二進制,還有一位沒有被存儲的最高位,固定為1,所以整個尾數(shù)即:1000 1011 1100 1010 1110 1111,則根據(jù)實際的冪數(shù),浮點型數(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,此時又分兩大類情況:

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

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

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

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

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

(3) 把步驟(2)得到的二進制數(shù)(EEEE EEEE)減127得到二進制的最高位冪數(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位二進制數(shù)乘以2k并相加即是所求浮點數(shù)

2 編程實現(xiàn)

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

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

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

3 仿真結(jié)果

把前面舉例的數(shù)據(jù)0xC1420000進行計算,計算結(jié)果如圖3所示??捎蓤D3看出計算結(jié)果和第1.2.1中計算結(jié)果一致。

其次再把第1.2.2部分中所舉的數(shù)據(jù)用軟件進行計算,結(jié)果如圖3所示。

可由圖4看出,計算結(jié)果與第1.2.2部分中分析得出的結(jié)果一致。最后把第1.2.3部分中描述的情況用軟件實現(xiàn),結(jié)果如圖5所示。

圖5顯示的是E部分全部為1且尾數(shù)部分不全為0的情況的計算結(jié)果。

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

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

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

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

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

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

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

4 仿真結(jié)果驗證

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

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

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

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

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

5 結(jié) 論

利用Borland C++Builder 6.0編程開發(fā)環(huán)境完成的十六進制整型數(shù)據(jù)轉(zhuǎn)換為浮點型數(shù)據(jù)的軟件實現(xiàn)了從整型數(shù)據(jù)到浮點型數(shù)據(jù)的轉(zhuǎn)換計算,經(jīng)過二次開發(fā)該軟件可被用于Modbus通信協(xié)議中高精度浮點型數(shù)據(jù)的傳輸打包、解析和顯示。另外,本文也完成了從浮點型數(shù)據(jù)到十六進制整型數(shù)據(jù)的轉(zhuǎ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] 譚浩強.C語言程序設(shè)計[M].4版.北京:清華大學(xué)出版社,2010.

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

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

[6] 陳鵬,蔡雪梅.NIOS浮點運算定制指令的實現(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] 謝躍雷,陳敏.粒子濾波算法中浮點指數(shù)函數(shù)的FPGA設(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ù)二進制
“改寫”與“省略”三不同
LEO星座增強GNSS PPP模糊度浮點解與固定解性能評估
用二進制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
連續(xù)自然數(shù)及乘積的尾數(shù)和奇偶性的分析
有趣的進度
基于浮點DSP的鐵路FSK信號檢測
2019年度下半年《啟迪與智慧》上下半月刊、《幽默與笑話》上下半月刊、《拳擊與格斗》上半月刊抽大獎中獎結(jié)果
二進制在競賽題中的應(yīng)用
基于FPGA的浮點FIR濾波器設(shè)計
改進的Goldschmidt雙精度浮點除法器