IEEE-754是由電子與電氣工業協會制定的一整套浮點數表示的標準。本文主要分析常用的binary32(單精度),binary64(雙精度可以此類推)。
Binary32占用存儲器4bytes,可以表示數值(2?2?23)×2127≈3.402823×1038,相比之下,int32(有符號32位整型數)可以表示到2-31-1=2,147,483,647。在同樣的存儲寬度下,binary32表示的范圍是int32的158,456,293,939,825,284,266,763,033,469.56倍。
Binary32存儲結構如下:
Hex:0x419C0000
二進制表示為
十進制表示為
value=(-1)0×2(131-127)×(1+2(-3)+2(-4)+2(-5)=(19.5)10
因此,對于每一個浮點數來說,主要有兩個部分構成:指數部分和尾數部分。
指數部分有兩個特例:即0x00和0xFF
當為0x00時適用如下:(-1)signbit×2-126×0.significandbits即表示±0.0。此時,尾數部分沒有實際的意義。
當為0xFF時表示±infinity。
尾數部分0~11111111111111111111111b
各位的權值如下:
bit23=1為了節省存儲空間此位為隱藏位;
bit22=0.5
bit21=0.25
bit20=0.125
bit19=0.0625
bit18=0.03125
.
.
bit0=0.00000011920928955078125
一個整型數,如果用IEEE-754表示可能會有誤差。
[-224,224]=[-16777216,16777216],沒有誤差。
[-225,-224]=[-33554432,-16777217]或[16777217,33554432],向2倍數舍入。
[-226,-225-1]或[225+1,226],向4的倍數舍入。
…
[-2127,-2126-1]或[2126+1,2127],向2103的倍數舍入。
[-2128,-2127-1]或[2127+1,2128],向2127-23的倍數舍入。
value≤-2128或value≥2128,向∞舍入。
要注意數據轉化時帶來的系統誤差,如要克服,就需要綜合考慮。
計為超聲波液位計在測量過程中,由于液位的測量要計算聲波來回的時間差,而時間差的測量要用到當前環境下的聲速。而環境的不同導致聲速的不同,在用不同尾數表示聲速時,會帶給系統一定的誤差。為了減小這種系統誤差,聲速的計算采用的是64bit雙精度,保證在計算距離的時候,使公式本身帶來的系統誤差小,也整體提高了測量的精度。
同樣的例子,輸出的4~20mA電流的數值,也需表示。在使用當前的距離計算液位,再根據液位計算電流值的情況下,如果使用尾數少的小數表示,可能一次的計算誤差幾乎可以忽略不計,但經過多次級聯的運算后,帶來的誤差便不可忽視。一些特殊的情況下,可能還會直接影響到測量的精度,為了保證高精度液位的測量,選用雙精度是明智的選擇。
以上就是“IEEE-754浮點格式應用分析”的相關介紹,如欲了解更多物位開關(料位開關、液位開關)、物位計(料位計、液位計)等物位測量儀表方面的知識,歡迎關注微信公眾號:Jiweimeter。(文章摘自:www.jiweimeter.com/yfshow-23-927-1.html,轉載請注明出處。)