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

?

MATLAB中數(shù)值型數(shù)據(jù)的機內(nèi)編碼與存貯空間浪費

2016-01-08 01:06:55井敏英

MATLAB中數(shù)值型數(shù)據(jù)的機內(nèi)編碼與存貯空間浪費

井敏英

(陜西理工學院 物理與電信工程學院, 陜西 漢中 723000)

[摘要]MATLAB中的數(shù)值型數(shù)據(jù)分為整數(shù)型和浮點型,整數(shù)型數(shù)據(jù)以二進制補碼存儲,浮點型數(shù)據(jù)存儲復雜。針對此情況,在MATLAB 2012a環(huán)境中,對浮點型單精度實數(shù)和雙精度實數(shù)的機內(nèi)編碼方案進行實驗研究,結(jié)果表明浮點型數(shù)據(jù)表示為規(guī)范形式,存儲其中的數(shù)符碼、指數(shù)碼和尾數(shù)編碼。根據(jù)實數(shù)絕對值大小范圍的不同,尾數(shù)有兩種不同的機內(nèi)編碼方案:“大實數(shù)”尾碼和“小實數(shù)”尾碼。MATLAB浮點型數(shù)據(jù)的機內(nèi)編碼一方面對所表示數(shù)的范圍做了擴充,另一方面實數(shù)編碼方案存在大量存貯空間閑置。為充分利用存儲資源,MATLAB軟件有必要進一步優(yōu)化。

[關鍵詞]MATLAB; 浮點型數(shù)據(jù); 機內(nèi)編碼;存貯空間浪費

[文章編號]1673-2944(2015)05-0045-05

[中圖分類號]TP311

收稿日期:2015-03-05

作者簡介:井敏英(1978—),女,陜西省富平縣人,陜西理工學院講師,碩士,主要研究方向為信號處理。

MATLAB是全世界最流行、應用最廣泛的科學與工程計算軟件之一[1],在工程領域有廣泛應用[2-4],與其它軟件也有很好的結(jié)合性[5-7],但對MATLAB中實數(shù)的機內(nèi)編碼研究較少。王正林等[8]給出的MATLAB數(shù)值型數(shù)據(jù)的表示范圍是不準確的,并且未涉及數(shù)據(jù)的機內(nèi)編碼方案。龍姝明、陳愛民等[9-10]雖然準確討論了實數(shù)的機內(nèi)編碼、表數(shù)范圍及有效位數(shù)等實數(shù)編碼相關問題,但僅僅是C語言的實數(shù)編碼方案,并且未指出編碼方案存在存貯空間浪費現(xiàn)象。實驗表明,MATLAB浮點數(shù)編碼方案有一部分與C語言一致,也有為了擴大表數(shù)范圍而做出的擴展,擴展部分與C語言實數(shù)編碼方案不同,MATLAB浮點數(shù)編碼方案擴展未見文獻報道。本文以MATLAB軟件2012a為基礎,對單精度實數(shù)和雙精度實數(shù)的機內(nèi)編碼形式進行了實驗研究,給出MATLAB的實數(shù)編碼方案的全部及其表數(shù)范圍和量化階,并指出MATLAB實數(shù)編碼方案存在的存貯空間浪費現(xiàn)象。

1單精度實數(shù)的機內(nèi)編碼方案與空間浪費

MATLAB中single表示單精度實數(shù),每個數(shù)據(jù)占4 B空間,即32 bit,按絕對值大小不同分別有兩種編碼方案。絕對值范圍為[2-126,2127(2-2-23)],并且量化階為2-23=1.192 1×10-7的數(shù)稱為大單精度實數(shù)(singlebig),MATLAB對這類數(shù)的編碼方案與C語言編碼方案完全一致,這類編碼方案表示的十進制數(shù)絕對值范圍為1.175 5×10-38~3.402 8×1038,現(xiàn)行文獻[8]給出的單精度實數(shù)編碼方案中的表數(shù)范圍實際是大單精度實數(shù)的表數(shù)范圍,對應尾碼方案中的h=1。

MATLAB中絕對值范圍為[0,2-126-2-149],并且量化階為2-149=1.403×10-45的數(shù)稱為小單精度實數(shù)(singlesmall),相應編碼方案中尾碼方案中的h=0。這類實數(shù)的編碼方案是全新的,而且是MATLAB特有的,沒有C語言對應,到目前為止沒有文獻報道。

1.1 大單精度實數(shù)的機內(nèi)編碼方案

在MATLAB中實數(shù)可以規(guī)范為

(1)

機內(nèi)編碼方案為SET,其中,S為數(shù)符碼,E=p+127為指數(shù)碼,h+T為尾碼。S=0(表示正實數(shù))或1(表示負實數(shù))。

絕對值范圍為[2-126,2127(2-2-23)]的實數(shù)稱為大單精度實數(shù)(singlebig),h=1,指數(shù)碼中p的取值范圍為-126≤p≤127,指數(shù)碼取值范圍為1≤E≤254,尾數(shù)碼中T的取值范圍為0≤T≤1-2-23。存儲時在4 B空間中S、E、T分別占用1、8、23個bit,h=1默認不用存儲,其存儲格式為:

S8 bitEcode23 bitTcode

按照編碼方案SET,絕對值最小的非0實數(shù)是2-126=1.175 5×10-38,編碼方案中的E=1=(0000 0001)2=01(H),T=0,S=0或1,這個數(shù)的十六進制碼為0080 0000(H)(2-126)或8080 0000(H)(-2-126)。絕對值最大的實數(shù)是2127(1+1-2-23)=3.402 8×1038,編碼方案SET中的E=254=(1111 1110)2,T=1-2-23=(111 1111 1111 1111 1111 1111)2,S=0或1,這個數(shù)的十六進制機內(nèi)碼為7f7f ffff(H)(正數(shù))或ff7f ffff(H)(負數(shù))。在MATLAB軟件命令窗口中,輸入realmin(′single′)運行給出1.175 5×10-38,輸入realmax(′single′)運行給出3.402 8×1038,其中realmin和realmax為MATLAB內(nèi)部函數(shù)。輸入

format hex;x=single([2^-126,-2^-126])

y=single([2^127*(2-2^-23),-2^127*(2-2^-23)])

運行后給出絕對值最小、最大的“大單精度實數(shù)”的十六進制機內(nèi)編碼。

實驗發(fā)現(xiàn),在MATLAB的大單精度實數(shù)編碼方案SET中,S=0,T=0,p=128,E=p+127=255的編碼表示正無窮大Inf,它的32 bit二進制機內(nèi)碼7f80 0000(H)對應2128:

01111 11110000 0000 0000 0000 0000 000

S=1,T=0,p=128,E=p+127=255的編碼表示負無窮大-Inf,32 bit二進制機內(nèi)碼ff80 0000(H)對應-2128:

11111 11110000 0000 0000 0000 0000 000

非數(shù)符號NaN的機內(nèi)編碼ffc0 0000(H)對應(-1)12128(1+2-1),即S=1,p=128,E=p+127=255,T=2-1:

11111 11111000 0000 0000 0000 0000 000

但卻不能用single((-1)*2^128*(1+2^-1))命令輸入NaN;“大單精度實數(shù)”編碼方案中,數(shù)的量化階為2-126×2-23=2-149=1.401 298 5×10-45≈0.000 000 1×10-38;大單精度實數(shù)只有23位尾數(shù),所以對應十進制數(shù)的有效位數(shù)為lg 223=6.923 689 9≈7位。

編碼實例,實數(shù)x=-128.5=(-1)127(1+2-8),按照式(1)的編碼方案,S=1,E=7+127=134,T=2-8,它的編碼為xSET=(1 1000 0110 0000 0001 0000 0000 0000 000)2=c300 8000(H)。為了驗證編碼的正確性,在MATLAB軟件命令窗口中輸入命令

format hex;x=single(-128.5)

運行后得到xSET=c300 8000(H),實驗驗證了結(jié)果的正確性。

在“大單精度實數(shù)”編碼方案SET中,絕對值大于2127(2-2-23)的數(shù)均視為無窮大,絕對值小于2-126的所有實數(shù)均視為0。為了擴展實數(shù)在區(qū)間[0,2-126)上的表數(shù)精度,MATLAB增加了“小單精度實數(shù)”編碼方案。

1.2 小單精度實數(shù)的機內(nèi)編碼

絕對值范圍在[0,2-126-2-149]內(nèi)的實數(shù)稱為小單精度實數(shù)(singlesmall),編碼方案還是SET,與大單精度實數(shù)編碼方案不同的是h=0。其中,E=p+126=0固定不變,尾數(shù)T取值范圍為:0≤T<1-2-23。由于2-126-2-149=2-127(2-2-22),所以對應p=-127,E=p+127=0對應的8bit指數(shù)碼為0。特別h=0不需要存貯。存儲格式為:

S0000 000023bitTcode

按照式(1)的編碼方案,實數(shù)x=2-127=2-1262-1,32位二進制機內(nèi)編碼為xSET=(0 0000 0000 1000 0000 0000 0000 0000 000)2=0040 0000(H),與實驗結(jié)果相同。

在MATLAB軟件中,由于對實數(shù)編碼方案做了擴展,所以小于2-126的單精度實數(shù),編碼并不為0。例如8bit指數(shù)碼全0的機器碼0000 0001(H)=2-1262-23=2-149=1.401 3×10-45。絕對值小于等于2-1262-24的實數(shù),機內(nèi)編碼為0000 0000(H)。單精度實數(shù)的量化階為1.401 3×10-45=2-149。小單精度實數(shù)表示數(shù)的絕對值范圍為0~1.175 5×10-38(即0~2-126-2-149)。

總之MATLAB單精度實數(shù)編碼方案擴充之后,能表示的實數(shù)絕對值在[0,2127(2-2-23)]范圍內(nèi),數(shù)的量化階為2-149=1.401 3×10-45。

1.3 單精度實數(shù)編碼方案的存貯空間浪費

單精度實數(shù)(single)的8位指數(shù)碼全1時,數(shù)符碼和尾碼有224個狀態(tài)不能用來表示數(shù),其中有兩種狀態(tài)分別表示Inf和-Inf,另有一種狀態(tài)表示NaN,所以單精度實數(shù)編碼方案SET共有232-(224-3)=4 278 190 083個表數(shù)狀態(tài),其中224-3=16 777 213個表數(shù)狀態(tài)無法有效利用,或者說MATLAB的單精度實數(shù)編碼方案造成了224個狀態(tài)只能用來表示3個數(shù),即Inf、-Inf、NaN??梢奙ATLAB實數(shù)編碼方案相對C語言有“小實數(shù)”的擴展,但仍然造成實數(shù)存貯空間有16 777 213個表數(shù)狀態(tài)無法有效利用的大量空間浪費現(xiàn)象。

2雙精度實數(shù)(double)的機內(nèi)編碼方案與存貯空間浪費

2.1 大雙精度實數(shù)的機內(nèi)編碼方案

doublebig表示大雙精度實數(shù),每個數(shù)據(jù)占8B空間,表數(shù)的絕對值范圍為[2-1 022,21 023(2-2-52)],即[2.225 1×10-308~1.797 7×10308],相應編碼方案仍然為SET。其中E=p+1 023,-1 022≤p≤1 023,1≤E≤2 046,h=1,0≤T≤1-2-52。S、E、T分別占用1、11、52個bit,h=1不用存貯。其存儲格式為:

S11bitp+1 02352bitTcode

MATLAB中,realmin(′double′)給出2.225 073 858 507 201×10-308,realmax(′double′)給出1.797 693 134 862 316×10308,eps=2-52=2.220 446 049 250 313×10-16。

按照式(1)編碼方案,實數(shù)x=128.75=(-1)027(1+2-8+2-9),E=7+1 023=1 030,S=0,T=2-8+2-9,它的機內(nèi)編碼為xSET=(0100 0000 0110 0000 0001 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000)2=4060 1800 0000 0000(H),與formathex;x=128.75運行后給出的實驗結(jié)果相同。

實驗發(fā)現(xiàn),在MATLAB的大雙精度實數(shù)編碼方案SET中,S=0,T=0,p=1 024,E=p+1 023=2 047的編碼表示正無窮大Inf,它的64bit二進制機內(nèi)碼8ff0 0000 0000 0000(H)對應21 024:

0 1111 1111 1110000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

S=1,T=0,p=1 024,E=p+1 023=2 047的編碼表示負無窮大-Inf,64位二進制機內(nèi)碼fff0 0000 0000 0000(H)對應-21 024:

11111 1111 1110000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

非數(shù)符號NaN的機內(nèi)編碼fff8 0000 0000 0000(H)對應(-1)121 024(1+2-1),即S=1,p=1 024,E=p+1 023=2 047,T=2-1:

11111 1111 1111000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

但卻不能用double((-1)*2^1024*(1+2^-1))命令輸入NaN;“大雙精度實數(shù)”編碼方案中,數(shù)的量化階為2-1 022×2-52=2-1 074=4.940 656 458 412 465×10-324;大雙精度實數(shù)有52位尾數(shù),所以對應十進制數(shù)的有效位數(shù)為lg252=15.653 56≈16位。

在MATLAB大雙精度實數(shù)的編碼方案SET中,絕對值超過21 023(2-2-52)的實數(shù)視為無窮大,但絕對值小于2-1 022=2.225 1×10-308的實數(shù)并不等于0,這說明MATLAB對雙精度實數(shù)的編碼方案SET做了擴展,也就是說,在MATLAB中存在“小雙精度實數(shù)”。

2.2 小雙精度實數(shù)的機內(nèi)編碼

小雙精度實數(shù)(doublesmall)表示數(shù)的絕對值范圍為[0,2-1 022-2-1 074],編碼方案還是SET,與大雙精度實數(shù)編碼方案不同的是h=0。因為2-1 022-2-1 074=2-1 022(1-2-52)=2-1023(2-2-51),所以p=-1 023,于是E=p+1 023=0固定不變,0≤T≤1-2-52,存貯S、E=0和T對應的機器碼的編碼格式為:

S0000 0000 00052bitTcode

實數(shù)的絕對值小于等于2-1 023(2-2-51)后,編碼方案按式(1)進行,p=-1 023固定不變,即指數(shù)碼11位二進制位全為0,而且0≤T<1。

例如2-1 022>2-1 023(2-2-51),所以是按大雙精度實數(shù)編碼,機器碼是2-1 022(1+T)=0010 0000 0000 0000(H),其中T=0。又例如,2-1 023<2-1 023(2-2-51),按小雙精度實數(shù)編碼,2-1 023=2-1 0222-1的機器碼是0008 0000 0000 0000(H),注意其中指數(shù)碼為0。實數(shù)2-1 0222-53的編碼為0000 0000 0000 0000(H)。實數(shù)2-1 0222-52=4.940 7×10-324編碼為0000 0000 0000 0001(H)??梢姡p精度實數(shù)的量化階為2-1 074=4.940 656 458 412 465×10-324。小雙精度實數(shù)表示數(shù)的絕對值范圍為0~2.225 073 858 507 201×10-308(即0~2-1 022-2-1 074)。

2.3 雙精度實數(shù)編碼方案的存貯空間浪費

雙精度實數(shù)(double)的11位指數(shù)碼全為1時,數(shù)符碼和尾碼共有253種狀態(tài)不能有效地表示數(shù),其中有兩種狀態(tài)分別表示Inf和-Inf,另有一種狀態(tài)表示NaN,所以雙精度實數(shù)共有264-(253-3)=18 437 736 874 454 810 624個有效的表數(shù)狀態(tài),存在253-3=9 007 199 254 740 989個狀態(tài)不能表示實數(shù),或者說MATLAB的雙精度實數(shù)編碼方案造成了253個存數(shù)狀態(tài)只能用來表示3個數(shù),即Inf、-Inf、NaN,編碼方案造成了大量的存貯空間浪費。

3MATLAB與C語言實數(shù)機內(nèi)碼編碼方案比較

在C語言中,將實數(shù)規(guī)范為

(2)

單精度和雙精度實數(shù)采用的編碼方案均為SET,而長雙精度則采用SE1T編碼方案[9]。

在MATLAB中,實數(shù)規(guī)范為

(3)

編碼方案均用SET,但對大實數(shù)h=1,小實數(shù)h=0。于是兩種方案表示的實數(shù)精度和范圍各不相同。其異同見表1。

表1 實數(shù)的 C語言編碼方案與 MATLAB編碼方案比較

由表1可見,實數(shù)的C語言編碼和MATLAB編碼都存在存儲空間浪費現(xiàn)象。C語言實數(shù)編碼中無正負無窮和非數(shù)概念,但是有上溢出和下溢出現(xiàn)象。MATLAB的實數(shù)編碼方案中有正負無窮和非數(shù)3個狀態(tài)的編碼,但無溢出現(xiàn)象,更重要的是MATLAB編碼擴展了機內(nèi)單、雙精度實數(shù)的表數(shù)范圍,大幅度減小了實數(shù)量化階。相比之下MATLAB的實數(shù)編碼方案優(yōu)于C語言的實數(shù)編碼方案。

4結(jié)語

MATLAB為了提高實數(shù)編碼的表數(shù)精度和表數(shù)范圍,對編碼方案做了擴展,加入“小實數(shù)概念”:singlesmall和doublesmall,結(jié)果大幅度減小了實數(shù)機內(nèi)存貯表示的量化階,單精度實數(shù)的機內(nèi)表示量化階為2-149=1.401 298 5×10-45,雙精度實數(shù)的機內(nèi)表示量化階為2-1 074=4.940 656 458 412 465×10-324,相對C語言的實數(shù)編碼方案,MATLAB實數(shù)機內(nèi)表示的精度明顯提高,表數(shù)范圍在接近0的空間上有明顯的擴展。但是MATLAB實數(shù)機內(nèi)編碼方案仍然沒有解決實數(shù)存貯空間的大量無效表數(shù)狀態(tài)造成的空間浪費的問題。

建議MATLAB研發(fā)團隊將來能夠通過重新選擇正負無窮和非數(shù)的機內(nèi)編碼來解決這一問題。如果將單精度或雙精度實數(shù)的8位或11位指數(shù)碼全置1,然后利用23位或52位尾碼寫入有用信息,則可以達到在MATLAB環(huán)境中加密信息的特殊效果,因為這時MATLAB看到的這組信息僅僅是正負無窮和非數(shù)符號組成的密文信息。

[參考文獻]

[1]鄭阿奇,曹弋.MATLAB實用教材[M].北京:電子工業(yè)出版社,2011:1-30.

[2]ZHENDai.MATLABsoftwareforGPScycle-slipprocessing[J].GPSSolutions,2012,16(2):267-272.

[3]MARKIEWICZT.UsingMATLABsoftwarewithTomcatserverandJavaplatformforremoteimageanalysisinpathology[J].DiagnPathol,2011,6(s1):18.

[4]PEREAA,CASTELLANOJ,ALDAYL,etal.AnalysisofbehaviourinsportsthroughpolarcoordinateanalysiswithMATLAB[J].Quality&Quantity,2012,46(4):1249-1260.

[5]王海崗,張坤宇,張雁佳,等.VC與MATLAB混合編程在圖像處理中的應用[J].計算機應用與軟件,2012,29(1):273-275.

[6]馬培勇,羅紅潤,周思柱.基于COM組件的MATLAB和VB混編方法在機械可靠性工程中的應用[J].計算機應用與軟件,2012,29(7):189-191.

[7]宋廣東,王昌,王金玉,等. 基于DLL技術(shù)和COM組件技術(shù)實現(xiàn)LabVIEW和MATLAB混合編程[J].計算機應用與軟件,2013,30(1):287-289.

[8]王正林,劉明.精通MATLAB7[M].北京:電子工業(yè)出版社,2006:62-67.

[9]龍姝明.實數(shù)機內(nèi)碼的實驗研究[J].漢中師范學院學報,2000,18(3):86-91.

[10]陳愛民,毛莉珍.TurboC中兩個浮點數(shù)問題分析[J].寧德師范學院學報:自然科學版,2013,25(4):371-372.

[責任編輯:謝 平]

InternalcodeofcomputerinMATLABandwasteofstoragespace

JINGMin-ying

(SchoolofPhysicsandTelecommunicationEngineering,ShaanxiUniversityofTechnology,

Hanzhong723000,China)

Abstract:Numeric data in MATLAB is divided into integral and Floating-point type, and integral type is stored in binary complement, but floating-Point data storage is very complicated. For this situation, in the MATLAB 2012a version, a simulated experiment was conducted to in terms of the single precision real number and double precision real number coding scheme within the machine. The experimental results showed that floating-point number is specified for standard form, and this form consisted of the storage of number sign code, index number and mantissa code. According to differences in size range of absolute value of real numbers, mantissa code has two coding scheme, and they are “big real number” and “small real number”. The results found that on the one hand the range of machine number is expanded in MATLAB floating-point data coding scheme. On the other hand, coding scheme allows for plenty of idle storage space. To make full use of storage resources, it is necessary to further optimize the MATLAB software.

Keywords:MATLAB;floating-pointnumber;internalcodeofcomputer;wasteofstoragespace

东阳市| 图木舒克市| 施甸县| 尉犁县| 陕西省| 罗山县| 正蓝旗| 迭部县| 怀宁县| 陆良县| 同江市| 北流市| 石景山区| 汝阳县| 南江县| 和田县| 丰镇市| 峡江县| 泰安市| 保康县| 平果县| 南华县| 渭南市| 麻阳| 昭通市| 夹江县| 綦江县| 全椒县| 彰化市| 大城县| 雷波县| 方正县| 米脂县| 平潭县| 措勤县| 津南区| 宣城市| 余庆县| 瓮安县| 盐源县| 越西县|