基于IEEE 754的浮點數(shù)存儲格式分析研究
一般地,32位字的第0位存放小數(shù)f的最低有效位LSB(the least significant bit),第22位存放小數(shù)f的最高有效位MSB(the most significant bit);第23位存放偏置指數(shù)的最低有效位LSB,第30位存放偏置指數(shù)的最高有效位MSB;最高位,第31位存放符號s。
3.2 雙精度格式
IEEE雙精度浮點格式共64位,占2個連續(xù)32位字,包含三個構成字段:52位的小數(shù)f,11位的偏置指數(shù)e,1位的符號位s。將這2個連續(xù)的32位字整體作為一個64位的字,進行重新編號。其中0:51位包含52位的小數(shù)f;52:62位包含11位的偏置指數(shù)e;而最高位,第63位包含符號位s。如圖2所示。
f[31:0]存放小數(shù)f的低32位,其中第0位存放整個小數(shù)f的最低有效位LSB,第31位存放小數(shù)f的低32位的最高有效位MSB。
在另外的32位的字里,第0 到19位,即f[51:32],存放小數(shù)f的最高的20位,其中第0位存放這20位最高有效數(shù)中的最低有效位LSB,第19位存放整個小數(shù)f的最高有效位MSB。第20到30位,即e[52:62],存放11位的偏置指數(shù)e,其中第20位存放偏置指數(shù)的最低有效位LSB,第30位存放最高有效位MSB。最高位,第31位存放符號位s。
在Intel x86結構計算機中,數(shù)據(jù)存放采用小端法(little endian),故較低地址的32位的字中存放小數(shù)f的f[31:0]位。而在在SPARC結構計算機中,因其數(shù)據(jù)存放采用大端法(big endian),故較高地址的32位字中存放小數(shù)f的f[31:0]位。
3.3 擴展雙精度格式
⑴ 擴展雙精度格式(SPARC 結構計算機)
該4倍精度浮點環(huán)境符合IEEE關于擴展雙精度格式的定義。該浮點環(huán)境的4倍精度浮點格式共128位,占4個連續(xù)32位字,包含3個構成字段:112位的小數(shù)f,15位的偏置指數(shù)e,和1位的符號s。將這4個連續(xù)的32位字整體作為一個128位的字,進行重新編號。其中0:110位包含小數(shù)f;112:126位包含偏置指數(shù)e;第127位包含符號位s。如圖3所示。
在SPARC結構計算機中,地址最高的32位字存放小數(shù)的32位最低有效位,即f[31:0];但是在PowerPC結構計算機中,卻是地址最低的32位字存放這些位。
緊鄰的兩個32位字(在SPARC機中向下計算,在PowerPC機中向上計算)分別存放f[63:32]和f[95:64]。
最后一個字的第0到15位存放小數(shù)的最高16位,即f[111:96]。其中第0位存放該16位的最低有效位,第15位存放整個小數(shù)f的最高有效位。第16到30位存放15位的偏置指數(shù)e,其中第16位存放偏置指數(shù)的最低有效位,第30位存放它的最高有效位。最高位,第31位存放符號s。
圖 3 擴展雙精度存儲格式 (SPARC 結構計算機)
⑵ 擴展雙精度格式(Intel x86結構計算機)
該浮點環(huán)境雙精度擴展格式符合IEEE雙精度擴展格式的定義。該浮點環(huán)境的擴展雙精度格式共80位,占3個連續(xù)32位字,包含四個構成字段:63位的小數(shù)f,1位顯式前導有效位(explicit leading significand bit)j,15位偏置指數(shù)e,和1位符號位s。將這3個連續(xù)的32位字整體作為一個96位的字,進行重新編號。其中0:63包含63位的小數(shù)f,第63位包含前導有效位j,64:78位包含15位的偏置指數(shù)e,最高位第79位包含符號位s。
在Intel結構系計算機中,這些字段依次存放在十個連續(xù)的字節(jié)中。但是,由于 UNIX System V Application Binary Interface Intel 386 Processor Supplement (Intel ABI) 要求雙精度擴展參數(shù),從而占用堆棧中3個相連地址的32位字,其中最高一個字的高16位未被使用,如圖4所示。
圖4 擴展雙精度存儲格式(Intel x86結構計算機)
地址最低的32位字存放小數(shù)f的低32位,即f[31:0]。其中第0位存放整個小數(shù)f的最低有效位LSB 第31位存放小數(shù)低32位的最高有效位MSB。
地址居中的32位字,第0到30位存放小數(shù)f的31位最高位,即f[62:32]。其中第0位存放31位最高小數(shù)位的最低有效位LSB,第30位存放整個小數(shù)的最高有效位,地址居中的32位字的最高位第31位存放顯式的前導有效位j。
地址最高32位字里,第0到14位存放15位的偏置指數(shù)e,第0位存放偏置指數(shù)的最低有效位LSB,第14位存放最高有效位MSB,第15位存放符號位s。雖然地址最高的32位字的高16位在Intel x86結構系列機種未被使用,但他們對符合Intel ABI的規(guī)定來說,是必需的。
4 總結
以上討論了Intel x86、Power PC和SPARC平臺上使用的三種IEEE 754浮點數(shù)格式及其存儲格式,下面對浮點數(shù)的相關參數(shù)進行總結,具體見表2。
參考文獻
[1] David Goldberg with Doug Priest. What Every Computer Scientist Should Know about Floating-Point Arithmetic. http://grouper.ieee.org/
[2] Sun Corporation.Numerical Computation Guide, pp1-11. http://docs.sun.com
[3] Randal E.Bryant,David O#39;Hallaron. Computer Systems Aprogrammer’s Perspective(英文版) [M] .北京:電子工業(yè)出版社,2004
[4]David A. Patterson, John L. Hennessy.Computer Organization Design: The Hardware/Software Interface. (英文版 第二版) [M] . 北京:機械工業(yè)出版社,1999.275~321
評論