C語言中浮點數(shù)的存儲格式及其有效數(shù)字位數(shù)_第1頁
C語言中浮點數(shù)的存儲格式及其有效數(shù)字位數(shù)_第2頁
C語言中浮點數(shù)的存儲格式及其有效數(shù)字位數(shù)_第3頁
C語言中浮點數(shù)的存儲格式及其有效數(shù)字位數(shù)_第4頁
C語言中浮點數(shù)的存儲格式及其有效數(shù)字位數(shù)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C 語言中浮點數(shù)的存儲格式及其有效數(shù)字位數(shù)!張宗杰張明亮(蘇州科技學院電子與信息工程系蘇州215011摘要:總結(jié)了C 語言中的單精度型(fioat 、雙精度型(doubie 和長雙精度型(iong doubie 浮點數(shù)的存儲格式,并用簡潔的C 程序給出了驗證;對其表示的十進制數(shù)的有效數(shù)字位數(shù),從相對誤差的角度,給出了判定方法及結(jié)論。關(guān)鍵詞:浮點數(shù)單精度雙精度長雙精度階碼尾數(shù)有效數(shù)字位數(shù)中圖分類號:TP31Storage Format of A Binary Floating -Point Number and its Bits of Decimal Significant DigitsZhan

2、g ZongjieZhang Mingliang(Dept.of Eiectronics &Information Engineering ,Suzhou Coiiege of Science and Technoiogy ,Suzhou215011Abstract :It describes how fioating -point data (fioat ,doubie ,iong doubie stored in memory ,the range and precision of storage for-mats ,and how to vaiidate it in simpie

3、 C program.It discusses the number of decimai significant digits from the viewpoint of reiative error.Key words :fioating -point number ,fioat ,doubie ,iong doubie ,exponent ,mantissa ,significant digits Class number :TP310前言實數(shù)在計算機中一般以二進制浮點數(shù)的形式存放。可是,其具體的存儲格式等在有關(guān)的書籍中很難查到,多是泛泛地給出不同類型的浮點數(shù)(單精度型、雙精度型、長雙精

4、度型的十進制數(shù)的數(shù)值范圍,及其大致能提供的有效數(shù)字位數(shù)。而用計算機進行數(shù)值運算時,經(jīng)常需要關(guān)注有效數(shù)字的位數(shù),即數(shù)據(jù)的精確度問題。為此查閱了美國電氣電子工程師學會(IEEE 的IEEE 754-1985標準,該標準給出了有關(guān)浮點數(shù)在計算機中的存儲格式(多數(shù)計算機語言中浮點數(shù)的實現(xiàn)均參照或遵循此標準。本文在此基礎(chǔ)上通過C 程序驗證等總結(jié)了C 語言中浮點數(shù)的實現(xiàn)機制、準確的表示范圍等;并進一步討論了浮點數(shù)的十進制數(shù)有效數(shù)字位數(shù);論證了二進制數(shù)的位數(shù)與十進制數(shù)有效數(shù)字位數(shù)的關(guān)系。1有關(guān)科學記數(shù)法十進制的實數(shù)R 的二進制數(shù)的科學記數(shù)法可表示為:R I (-1S X M X 2E其中S 表示符號,S I

5、 1表示負數(shù),S I 0表示正數(shù)。M 為二進制數(shù)的系數(shù),規(guī)范化二進制數(shù)的M 形式為1.b 1b 2b n 。整數(shù)E 為二進制數(shù)的指數(shù)。2IEEE 754-1985標準簡介IEEE 754-1985標準規(guī)定了fioat(單精度型、doubie (雙精度型浮點數(shù)R 的二進制存儲的編碼格式如下:最高位最低位符號S階碼E尾數(shù)M對于fioat 型,IEEE 754-1985標準規(guī)定用32位二進制編碼表示,具體如下:最高位31位,保存符號位S ,“0”表示正數(shù),“1”表示負數(shù)。30位23位,共8位,移碼方式(指數(shù)值加上偏移量127保存指數(shù)部分,稱為階碼。22位0位,共23位,保存系數(shù)部分,稱為尾數(shù),對于規(guī)

6、范化二進制數(shù),整數(shù)位的前導“1”不保存(隱含,直接保存小數(shù)部分b 1b 2b 23。48計算機與數(shù)字工程第34"""""""""""""""""""""""""""""""""""""""""

7、;""""""""""""""""""""""""卷!收到本文時間:2005年4月8日并有以下規(guī)定:若1!E !254,R =(-1SX (1+0.M X 2E -127此時R 為規(guī)范化數(shù);若E =0且M =0,R =0;若E =0且M "0,R =(-1SX (0.M X 2-126此時R 為非規(guī)范化數(shù);若E =255且M "0,非數(shù)值

8、的編碼組合(用NAN 表示;若E =255且M =0,R 溢出(用+INF 、-INF 分別表示正、負無窮大;對于doubIe 型,IEEE 754-1985標準規(guī)定用64位表示,具體如下:最高位63位,保存S ,“0”正數(shù),“1”負數(shù);62位52位,共11位,移碼方式(指數(shù)值加1023保存指數(shù),稱為階碼;51位0位,共52位,保存系數(shù)部分,稱為尾數(shù),對于規(guī)范化二進制數(shù),整數(shù)位的“1”不保存(隱含,直接保存小數(shù)部分b 1b 2b 52。并有以下規(guī)定:若1!E !2046,R =(-1SX (1+0.M X 2E -1023此時R 為規(guī)范化數(shù);若E =0且M =0,R =0;若E =0且M &q

9、uot;0,R =(-1SX (0.M X 2-1022此時R 為非規(guī)范化數(shù);若E =2047且M "0,R 非數(shù)值;若E =2047且M =0,R 溢出(無窮大;對于Iong doubIe 型,IEEE 754-1985標準中沒有給出具體規(guī)定。3浮點數(shù)的驗證通過直接輸入十進制實數(shù)的方法,來驗證浮點數(shù)在計算機中的存儲格式將非常麻煩和不準確,如能直接輸入和查看十進制數(shù)對應(yīng)的二進制編碼將非常方便和有效。利用C 語言的union(共用體/聯(lián)合體類型,就可以很容易地實現(xiàn)。例如以下的公用體定義:union fIoat r ;/長整型與單精度型長度都是32bitunsigned Iong n ;

10、X ;可用來驗證fIoat 型數(shù)據(jù)。給X.r 賦一實數(shù)值后,查看X.n 的十六進制值,可知其存儲格式;反之,給X.n 一個十六進制編碼,可查看其代表的浮點數(shù)值。以下的公用體定義:union doubIe r ;/int64與雙精度型都是64bitunsignedint64n ;X ;可用來驗證doubIe 型數(shù)據(jù)。以下的公用體定義:union Iong doubIe r ;/Iong doubIe 型為80bit.unsigned short n 5;/用n 4,n 3,n 2,n 1,n0聯(lián)合輸出X ;可用來驗證Iong doubIe 型數(shù)據(jù)。以下是fIoat 型的部分結(jié)果:編碼對應(yīng)的十進制

11、數(shù)近似值7f7fffff 3.4028235e +38(正的規(guī)范化二進制數(shù)的最大數(shù)00800000 1.1754944e -38(正的規(guī)范化的二進制數(shù)的最小數(shù)007fffff 1.1754942e -38(正的非規(guī)范化的二進制數(shù)的最大數(shù)00000001 1.4012985e -45(正的非規(guī)范化的二進制數(shù)的最小數(shù),有效數(shù)字不足1位000000000.0000000e +00(正零的編碼7f800000+INF (正無窮大的編碼,用來表示溢出7fffffff +NAN(正的非數(shù)值的編碼組合之一,正常使用不會出現(xiàn)ff7fffff -3.4028235e +38(負的規(guī)范化的二進制數(shù)的絕對值最大的數(shù)

12、80800000-1.1754944e -38(負的規(guī)范化的二進制數(shù)的絕對值最小的數(shù)807fffff -1.1754942e -38(負的非規(guī)范化的二進制數(shù)的絕對值最大數(shù)80000001-1.4012985e -45(負的非規(guī)范化的二進制數(shù)絕對值最小的數(shù)80000000-0.0000000e +00(負零的編碼ff800000-INF (負的無窮大的編碼,用來表示溢出ffffffff-NAN(負的非數(shù)值的編碼組合之一,正常使用不會出現(xiàn)doubIe 型數(shù)據(jù)的部分結(jié)果十六進制編碼對應(yīng)的十進制數(shù)近似值7fefffffffffffff 1.7976931348623157e +308(正的規(guī)范化的二進

13、制數(shù)的最大數(shù)00100000000000002.2250738585072014e -308(正的規(guī)范化的二進制數(shù)的最小數(shù)58第34卷(2006第1#期計算機與數(shù)字工程OOOfffffffffffff 2.225O738585O72OO9e -3O8(正的非規(guī)范化的二進制數(shù)的最大數(shù)OOOOOOOOOOOOOOOl 4.94O6564584l24654e -324(正的非規(guī)范化的二進制數(shù)的最小數(shù)OOOOOOOOOOOOOOOO O.OOOOOOOOOOOOOOOe +OO (正零的編碼7ffOOOOOOOOOOOOO +INF (正無窮大的編碼7fffffffffffffff+NAN(正的非數(shù)值

14、的編碼組合之一負數(shù)的結(jié)果可比照正數(shù)部分得出,此處從略。通過程序驗證發(fā)現(xiàn),BorIand 公司的Turbo C 、BorIand C +及C +BuiIder 提供的Iong doubIe 型數(shù)據(jù)是采用8O 位二進制表示的,其中階碼位擴展為l5位,并且:與fIoat 和doubIe 型不同,其保存尾數(shù)的63位O 位直接保存全部尾數(shù),不采用隱去首位整數(shù)l 的方法。Iong doubIe 型數(shù)據(jù)的實現(xiàn)不夠完整,包括:尾數(shù)的最后ll 位在轉(zhuǎn)換到十進制數(shù)顯示時沒有進行完整的轉(zhuǎn)換運算,似乎未充分使用;對階碼小于OXOO38的數(shù)(很接近O 不完全支持;甚至有些合法的二進制編碼組合轉(zhuǎn)換成十進制數(shù)值時為亂碼等。

15、微軟的VisuaI C +的Iong doubIe 型數(shù)據(jù)大概是出于兼容性考慮而提供的,內(nèi)部實現(xiàn)完全等同于doubIe 型。因此,建議用戶不使用C 語言的Iong doubIe 數(shù)據(jù)類型。4有效數(shù)字位數(shù)對于機內(nèi)浮點數(shù)的保存和運算,IEEE 754-l985標準要求浮點數(shù)的運算過程中使用附加位保存中間結(jié)果,最后結(jié)果的保存可以按照某種“舍入方式”進行,以確保運算過程中不降低數(shù)據(jù)精度。該標準定義了多種“舍入方式”,其中最常用的是“最接近舍入(Round to Nearest 方式”(對于誤差相同時,可以向零舍入。實驗表明,BorIand C (包括BorIand C +BuiIder 和VisuaI

16、 C +對于不超出規(guī)范化數(shù)表示范圍的數(shù)據(jù),在內(nèi)部運算和轉(zhuǎn)換時均采用了“最接近舍入方式”。理論上,有限位數(shù)的二進制浮點數(shù)必能轉(zhuǎn)換為有限位數(shù)的十進制數(shù);但對于有限位數(shù)的十進制浮點數(shù),轉(zhuǎn)換為二進制數(shù)不能保證是有限位數(shù),且多數(shù)情況下不是有限位數(shù)。因此,如果提供足夠的輸出位數(shù),二進制浮點數(shù)可以精確轉(zhuǎn)換為十進制數(shù),不產(chǎn)生轉(zhuǎn)換誤差。但是,由于沒有一個2n 與lO m (n ,m 為整數(shù)相等,二進制和十進制相互轉(zhuǎn)換的位數(shù)沒有簡單的若干位對應(yīng)若干位的對應(yīng)關(guān)系。一般地,二進制浮點數(shù)向十進制轉(zhuǎn)換都只提供若干位的近似值,并不提供全部的數(shù)字位數(shù)。事實上更主要的原因是:計算機中表示的二進制浮點數(shù)絕大多數(shù)本身就是實際數(shù)值的

17、近似值,從有效數(shù)字的角度看,轉(zhuǎn)換為十進制數(shù)時提供更多位數(shù)字并無使用價值。這里自然就有一個如何看待和精確使用數(shù)值的問題,即有效數(shù)字位數(shù)的問題。尤其對于各種數(shù)值計算,必須掌握其有效數(shù)字位數(shù)。但查閱有關(guān)資料,沒有看到對計算機中浮點數(shù)的有效數(shù)字位數(shù)的準確敘述,一般僅指出fIoat 和doubIe 型大致的有效數(shù)字位數(shù),且說法不一,沒有給出依據(jù)。在此,從相對誤差(誤差絕對值與數(shù)值絕對值的比值的角度給出一般性的結(jié)論。對于能轉(zhuǎn)換為fIoat 型規(guī)范化二進制編碼的十進制數(shù)值,其二進制編碼的尾數(shù)為24位(包括一位隱含“l(fā) ”,按“最近舍入方式”,則其保存的二進制浮點數(shù)的最大絕對誤差為O.5X 2-23X 2E

18、-l27,尾數(shù)值為最小值l 時的相對誤差可取得最大值,為O.5X 2-23=2-24,尾數(shù)值為全l 時(對應(yīng)的尾數(shù)為2-2-23,約為2的相對誤差可取得最小值,約為2-25;即其保存的二進制浮點數(shù)的相對誤差!2-24成立。在不考慮數(shù)據(jù)參與運算導致的誤差傳遞等情況下(浮點數(shù)的機內(nèi)運算采取了增加附加位的做法,見前述,一般能保證運算過程不降低數(shù)據(jù)精度,將保存的fIoat 型二進制數(shù)完整轉(zhuǎn)換為十進制數(shù)(必定是有限位數(shù)時,其帶來的十進制數(shù)的相對誤差!2-24(約O.596X lO -7。對于具有嚴格的n 位有效數(shù)字的十進制數(shù)D 的最大絕對誤差(用"maX 表示為末位數(shù)字的半個單位,其最大相對誤

19、差為"maX /D ,顯然該值>O.5X lO -n 。由此顯然可得出相對誤差!O.5X lO -n 的十進制數(shù)必能提供至少n 位有效數(shù)字。因此,從相對誤差的大小就可確定:二進制數(shù)與其能提供的十進制數(shù)的有效數(shù)字位數(shù)的關(guān)系。我們還可以從另一個角度來理解浮點數(shù):計算機中的二進制浮點數(shù)是一種用一個二進制編碼組合(所代表的準確數(shù)值記為D ,尾數(shù)的位數(shù)用m 表示代表數(shù)學上一個區(qū)間范圍(D -"maX (D +"maX 的實數(shù),這個區(qū)間的大小2"maX 對于不同的階碼并不一致,但區(qū)間的半寬度"maX 與數(shù)值D 的比值介于2-m -l 2-m 之間,這

20、與最大相對誤差的大小介于2-m 2-m +l 之間的說法是一致的。(下轉(zhuǎn)第9O 頁68C 語言中浮點數(shù)的存儲格式及其有效數(shù)字位數(shù)第34#卷帶寬。4行切換技術(shù)行切換技術(shù)主要用于DSP 運算速度高于視頻DMA 輸出速度的場合。如下圖所示,行切換使得DMA 在兩個或者兩個以上的幀之間穿插,動態(tài)重組為一個正確大小的幀。圖中灰色背景的象素行塊被真正輸出, 而白色背景的行塊則被丟棄。圖8行切換示例采用行切換技術(shù),使得低速輸出的時候畫面能保持穩(wěn)定,而在高速的每秒30-120fps 的速度輸出時,又體現(xiàn)了他的自適應(yīng)性以及切換位置無關(guān)性。5結(jié)束語本文根據(jù)視頻輸出系統(tǒng)的特點,提出了基于AD 公司Biackfin

21、533DSP 視頻輸出系統(tǒng)的兩種系統(tǒng)解決方案,并對這些方案進行了比較測試和分析。從這些實驗結(jié)果可以看到,方案2以L1為高速緩存,大大提高了系統(tǒng)總線利用率,并且在幀率等環(huán)境變化的情況下,視頻輸出占用帶寬一直固定為16%,說明該方案所描述的系統(tǒng)具備非常強的穩(wěn)定性。在本文末尾還提出了自定義的行切換技術(shù),該技術(shù)使得低帶寬高幀頻的視頻輸出系統(tǒng)成為可能。參考文獻1張雄偉,陳亮等.DSP 芯片的原理與開發(fā)應(yīng)用M .北京:電子工業(yè)出版社,20032黎洪松.數(shù)字視頻技術(shù)及其應(yīng)用M .北京:清華大學出版社,19973程佩青.數(shù)字信號處理教程M .北京:清華大學出版社,19954ADSP -BF533Biackfi

22、n Processor Hardware Reference.Ana-iog Devices ,Inc.,20035ADSP -BF533Biackfin Biackfin Processor Instruction Set Ref-erence ,Anaiog Devices ,Inc.,!2003(上接第86頁對于fioat 型數(shù)據(jù)能提供相對誤差"2-24(約0.596X 10-7的十進制數(shù),由前述的推論可得到保守的結(jié)論:其十進制數(shù)的有效數(shù)字不少于6位;當首位有效數(shù)字的數(shù)值小于8時,有效數(shù)字位數(shù)不少于7位。另外,為了充分使用fioat 型的有效數(shù)字,向計算機提供的十進制實數(shù)盡量為9位有效數(shù)字(超出9位的數(shù)字在轉(zhuǎn)換時不起作用,以使計算機能更精確地轉(zhuǎn)換,使誤差最小。對于doubie 型浮點數(shù),其二進制編碼的尾數(shù)為53位(包括一位隱含“1”,保存的二進制相對誤差"2-53(約1.11X 10-16。十進制數(shù)的16位有效數(shù)字的最大相對誤差>0.5X 10-16,因此,doubie 型

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論