一種面向科學計算的浮點型數(shù)據(jù)無損壓縮方法
【技術(shù)領域】
[0001]本發(fā)明屬于數(shù)據(jù)處理技術(shù)領域,具體涉及一種面向科學計算的浮點型數(shù)據(jù)無損壓縮方法。
【背景技術(shù)】
[0002]隨著社會的日益發(fā)展,由科學研究(天文學、生物學、海洋學)、社交網(wǎng)絡(faceb00k、QQ、人人網(wǎng))、自然環(huán)境監(jiān)測(暴雨、洪水、地震)等產(chǎn)生的數(shù)以億計的數(shù)據(jù)呈爆炸式增長,無論在工業(yè)界還是學術(shù)界,大規(guī)模數(shù)據(jù)處理都受到火熱追捧。
[0003]數(shù)據(jù)的多樣性和指數(shù)級增長給數(shù)據(jù)存儲和傳輸帶來了巨大壓力,嚴重阻礙了高性能計算在科學領域的運用和發(fā)展。數(shù)據(jù)壓縮一直是人們用于解決此類問題的熱點技術(shù),尋找高效的數(shù)據(jù)壓縮技術(shù)可以有效降低數(shù)據(jù)存儲量和傳輸成本。
[0004]數(shù)據(jù)壓縮按解碼后的數(shù)據(jù)是否完整恢復原數(shù)據(jù),可分為有損壓縮和無損壓縮。有損壓縮指的是解壓縮時不能精確恢復原始數(shù)據(jù),有一定的信息損失,該方法主要用于圖像、視頻、音頻等少量信息遺失而不會影響原有數(shù)據(jù)效果的領域。無損壓縮又稱為熵編碼、無失真編碼,其工作原理是減少或去除數(shù)據(jù)中的冗余度,且原數(shù)據(jù)可被精確恢復。
[0005]對大部分科學數(shù)據(jù)而言,任何一個微小誤差都將可能引發(fā)一場災難,所以必須采用無損壓縮技術(shù),以保證數(shù)據(jù)恢復時的完整性;同時,數(shù)據(jù)壓縮速度必須十分迅速,以適應科學數(shù)據(jù)規(guī)模大、密集度高、更新快等特點。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的是提供一種面向科學計算的浮點型數(shù)據(jù)無損壓縮方法,解決了浮點型數(shù)據(jù)壓縮率低、壓縮緩慢的問題。
[0007]本發(fā)明所采用的技術(shù)方案是,一種面向科學計算的浮點型數(shù)據(jù)無損壓縮方法,具體按照以下步驟實施:
[0008]步驟1、對浮點型數(shù)據(jù)的符號域、指數(shù)域和尾數(shù)域分別映射、分別壓縮,并對壓縮后的數(shù)據(jù)以二進制位為單位進行存儲;
[0009]步驟2、獲得尾數(shù)域差值的有效數(shù)據(jù)、指數(shù)域差值和符號域,并根據(jù)IEEE754格式和參考數(shù)據(jù),完整恢復出原始數(shù)據(jù),
[0010]其中,參考數(shù)據(jù)是前一個被壓縮數(shù)據(jù)。
[0011]本發(fā)明的特點還在于:
[0012]步驟I具體為:
[0013]步驟1.1、內(nèi)存拷貝參考數(shù)據(jù)和被壓縮數(shù)據(jù),將其分別轉(zhuǎn)換為4個字節(jié)的整數(shù);
[0014]步驟1.2、根據(jù)IEEE754格式,提取出參考數(shù)據(jù)和被壓縮數(shù)據(jù)的符號域、指數(shù)域和尾數(shù)域;
[0015]步驟1.3、保持被壓縮數(shù)據(jù)的符號域值不變;
[0016]步驟1.4、采用減法運算得出被壓縮數(shù)據(jù)與參考數(shù)據(jù)的指數(shù)域差值,當指數(shù)域差值的值較小時,標記相應的標志位;當指數(shù)域差值的值較大時,單獨存儲被壓縮數(shù)據(jù)的指數(shù)域,并標記相應的標志位;
[0017]步驟1.5、采用減法運算得出被壓縮數(shù)據(jù)與參考數(shù)據(jù)的尾數(shù)域差值,刪除尾數(shù)域差值頭部的連續(xù)冗余0,存儲有效數(shù)據(jù),同時標記有效數(shù)據(jù)的個數(shù);
[0018]步驟1.6、采用位位相接的方式封裝所有數(shù)據(jù)尾數(shù)域差值的有效數(shù)據(jù)位,并封裝被壓縮數(shù)據(jù)的符號域、指數(shù)域及各種標志位,即實現(xiàn)了數(shù)據(jù)的完全無損壓縮。
[0019]步驟1.4中指數(shù)域差值的值較小為被壓縮數(shù)據(jù)與參考數(shù)據(jù)的指數(shù)域差值為0,1,-1,對應的標記位為0,1,2 ;指數(shù)域差值的值較大為被壓縮數(shù)據(jù)與參考數(shù)據(jù)的指數(shù)域差值為其他,對應的標記位為3。
[0020]步驟2具體為:
[0021]步驟2.1、根據(jù)尾數(shù)部分的標志位值確定尾數(shù)域差值的有效數(shù)據(jù)位數(shù),并按位從尾數(shù)域的壓縮數(shù)據(jù)中取出該差值;然后由IEEE754格式可知該差值頭部所需的冗余O位數(shù),并對其進行填充;最后根據(jù)參考數(shù)據(jù)的尾數(shù)值恢復出被壓縮數(shù)據(jù)的尾數(shù)域;
[0022]步驟2.2、根據(jù)指數(shù)部分的標志位值,如果獲得的是指數(shù)域差值,根據(jù)參考數(shù)據(jù)的指數(shù)域恢復出被壓縮數(shù)據(jù)的指數(shù)域,轉(zhuǎn)到步驟2.3 ;如果獲得的是被壓縮數(shù)據(jù)的指數(shù)域,直接轉(zhuǎn)到步驟2.3 ;
[0023]步驟2.3、從壓縮數(shù)據(jù)中取出被壓縮數(shù)據(jù)的符號域;
[0024]步驟2.4、按照IEEE754格式,組合符號域、指數(shù)域和尾數(shù)域變成4個字節(jié)的整數(shù),并內(nèi)存映射該整數(shù)使其還原成被壓縮的浮點型數(shù)據(jù)。
[0025]本發(fā)明的有益效果是:本發(fā)明一種面向科學計算的浮點型數(shù)據(jù)無損壓縮方法,所采用的尾數(shù)整型法(Think Mantissa as Integer,TMI)根據(jù)浮點型數(shù)據(jù)各部分的物理含義及結(jié)構(gòu)特點,對數(shù)據(jù)各部分分別映射、分別壓縮,打破了傳統(tǒng)的浮點型數(shù)據(jù)壓縮方法中,強行將其按字節(jié)劃分,既破壞了浮點型數(shù)據(jù)的物理含義,又使壓縮率低下;再者,本發(fā)明無損壓縮方法沒有過多的數(shù)據(jù)預測或變換算法,從而有利于加快數(shù)據(jù)壓縮速度;最后,由于任何數(shù)據(jù)在計算機中都以二進制形式表示,所以該方法的思想可推廣到其它數(shù)據(jù)類型的壓縮。
【附圖說明】
[0026]圖1是本發(fā)明無損壓縮方法中數(shù)據(jù)壓縮的實施例流程圖;
[0027]圖2是本發(fā)明無損壓縮方法中數(shù)據(jù)解壓縮的實施例流程圖;
[0028]圖3是本發(fā)明無損壓縮方法與WinRAR、WinZIP的壓縮率比較圖;
[0029]如圖4所示為本發(fā)明無損壓縮方法與WinRAR、WinZIP的壓縮和解壓縮時間比較圖。
【具體實施方式】
[0030]下面結(jié)合附圖和【具體實施方式】對本發(fā)明進行詳細說明。
[0031]—種面向科學計算的浮點型數(shù)據(jù)無損壓縮方法,主要針對單精度浮點型數(shù)據(jù),根據(jù)IEEE754格式,利用數(shù)據(jù)之間的高度密集性,設計出尾數(shù)整型化(Think Mantissa asInteger, TH)壓縮技術(shù),具體按照以下步驟實施:
[0032]步驟1、數(shù)據(jù)壓縮:對浮點型數(shù)據(jù)的符號域、指數(shù)域和尾數(shù)域分別映射、分別壓縮,并對壓縮后的數(shù)據(jù)以二進制位為單位進行存儲,具體步驟如下:
[0033]步驟1.1、內(nèi)存拷貝參考數(shù)據(jù)和被壓縮數(shù)據(jù),將其分別轉(zhuǎn)換為4個字節(jié)的整數(shù);其中,參考數(shù)據(jù)是前一個被壓縮數(shù)據(jù);
[0034]步驟1.2、根據(jù)IEEE754格式,提取出參考數(shù)據(jù)和被壓縮數(shù)據(jù)的符號域、指數(shù)域和尾數(shù)域;
[0035]步驟1.3、保持被壓縮數(shù)據(jù)的符號域值不變;
[0036]步驟1.4、采用減法運算得出被壓縮數(shù)據(jù)與參考數(shù)據(jù)的指數(shù)域差值,由于參考數(shù)據(jù)與被壓縮數(shù)據(jù)具有極大相似性,因此該差值的值較小,因而所需要存儲的比特位也較少;當指數(shù)域差值的值較小即被壓縮數(shù)據(jù)與參考數(shù)據(jù)的指數(shù)域差值為0,1,-1時,標記相應的標志位,對應的標記位為0,1,2 ;當指數(shù)域差值的值較大,即被壓縮數(shù)據(jù)與參考數(shù)據(jù)的指數(shù)域差值為其他值時,單獨存儲被壓縮數(shù)據(jù)的指數(shù)域,并標記相應的標志位,對應的標記位為3 ;
[0037]步驟1.5、采用減法運算得出被壓縮數(shù)據(jù)與參考數(shù)據(jù)的尾數(shù)域差值,根據(jù)數(shù)據(jù)間具有極強的相似性可知,該尾數(shù)域差值頭部將產(chǎn)生若干連續(xù)冗余0,在存儲有效數(shù)據(jù)時刪除這些冗余O即可達到壓縮數(shù)據(jù)的效果,存儲有效數(shù)據(jù),同時標記有效數(shù)據(jù)的個數(shù),以便解壓時完整恢復原始數(shù)據(jù);
[0038]步驟1.6、采用位位相接的方式封裝所有數(shù)據(jù)尾數(shù)域差值的有效數(shù)據(jù)位,并封裝被壓縮數(shù)據(jù)的符號域、指數(shù)域及各種標志位,即實現(xiàn)了數(shù)據(jù)的完全無損壓縮。
[0039]步驟2、數(shù)據(jù)的解壓縮:獲得尾數(shù)域差值的有效數(shù)據(jù)、指數(shù)域差值和符號域,并根據(jù)IEEE754格式和參考數(shù)據(jù),完整恢復出原始數(shù)據(jù),進而滿足準確、實時無損的要求,具體步驟如下:
[0040]步驟2.1、根據(jù)尾數(shù)部分的標志位值確定尾數(shù)域差值的有效數(shù)據(jù)位數(shù),并按位從尾數(shù)域的壓縮數(shù)據(jù)中取出該差值;然后由IEEE754格式可知該差值頭部所需的冗余O位數(shù),并對其進行填充;最后根據(jù)參考數(shù)據(jù)的尾數(shù)值恢復出被壓縮數(shù)據(jù)的尾數(shù)域;
[0041]步驟2.2、根據(jù)指數(shù)部分的標志位值可確定被壓縮數(shù)據(jù)與參考數(shù)據(jù)的指數(shù)域差值或者可直接獲得被壓縮數(shù)據(jù)的指數(shù)域,如果獲得的是指數(shù)域差值,根據(jù)參考數(shù)據(jù)的指數(shù)域恢復出被壓縮數(shù)據(jù)的指數(shù)域,轉(zhuǎn)到步驟2.3 ;如果獲得的是被壓縮數(shù)據(jù)的指數(shù)域,直接轉(zhuǎn)到步驟2.3 ;
[0042]步驟2.3、從壓縮數(shù)據(jù)中取出被壓縮數(shù)據(jù)的符號域;
[0043]步驟2.4、按照IEEE754格式,組合符號域、指數(shù)域和尾數(shù)域變成4個字節(jié)的整數(shù),并內(nèi)存映射該整數(shù)使其還原成被壓縮的浮點型數(shù)據(jù)。
[0044]下面以具體實施例說明本發(fā)明無損壓縮方法的具體操