基于IEEE 754的浮點(diǎn)數(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雙精度浮點(diǎn)格式共64位,占2個(gè)連續(xù)32位字,包含三個(gè)構(gòu)成字段:52位的小數(shù)f,11位的偏置指數(shù)e,1位的符號位s。將這2個(gè)連續(xù)的32位字整體作為一個(gè)64位的字,進(jìn)行重新編號。其中0:51位包含52位的小數(shù)f;52:62位包含11位的偏置指數(shù)e;而最高位,第63位包含符號位s。如圖2所示。
圖 2 雙精度浮點(diǎn)數(shù)的存儲格式
f[31:0]存放小數(shù)f的低32位,其中第0位存放整個(gè)小數(shù)f的最低有效位LSB,第31位存放小數(shù)f的低32位的最高有效位MSB。
在另外的32位的字里,第0 到19位,即f[51:32],存放小數(shù)f的最高的20位,其中第0位存放這20位最高有效數(shù)中的最低有效位LSB,第19位存放整個(gè)小數(shù)f的最高有效位MSB。第20到30位,即e[52:62],存放11位的偏置指數(shù)e,其中第20位存放偏置指數(shù)的最低有效位LSB,第30位存放最高有效位MSB。最高位,第31位存放符號位s。
在Intel x86結(jié)構(gòu)計(jì)算機(jī)中,數(shù)據(jù)存放采用小端法(little endian),故較低地址的32位的字中存放小數(shù)f的f[31:0]位。而在在SPARC結(jié)構(gòu)計(jì)算機(jī)中,因其數(shù)據(jù)存放采用大端法(big endian),故較高地址的32位字中存放小數(shù)f的f[31:0]位。
3.3 擴(kuò)展雙精度格式
⑴ 擴(kuò)展雙精度格式(SPARC 結(jié)構(gòu)計(jì)算機(jī))
該4倍精度浮點(diǎn)環(huán)境符合IEEE關(guān)于擴(kuò)展雙精度格式的定義。該浮點(diǎn)環(huán)境的4倍精度浮點(diǎn)格式共128位,占4個(gè)連續(xù)32位字,包含3個(gè)構(gòu)成字段:112位的小數(shù)f,15位的偏置指數(shù)e,和1位的符號s。將這4個(gè)連續(xù)的32位字整體作為一個(gè)128位的字,進(jìn)行重新編號。其中0:110位包含小數(shù)f;112:126位包含偏置指數(shù)e;第127位包含符號位s。如圖3所示。
在SPARC結(jié)構(gòu)計(jì)算機(jī)中,地址最高的32位字存放小數(shù)的32位最低有效位,即f[31:0];但是在PowerPC結(jié)構(gòu)計(jì)算機(jī)中,卻是地址最低的32位字存放這些位。
緊鄰的兩個(gè)32位字(在SPARC機(jī)中向下計(jì)算,在PowerPC機(jī)中向上計(jì)算)分別存放f[63:32]和f[95:64]。
最后一個(gè)字的第0到15位存放小數(shù)的最高16位,即f[111:96]。其中第0位存放該16位的最低有效位,第15位存放整個(gè)小數(shù)f的最高有效位。第16到30位存放15位的偏置指數(shù)e,其中第16位存放偏置指數(shù)的最低有效位,第30位存放它的最高有效位。最高位,第31位存放符號s。
圖 3 擴(kuò)展雙精度存儲格式 (SPARC 結(jié)構(gòu)計(jì)算機(jī))
⑵ 擴(kuò)展雙精度格式(Intel x86結(jié)構(gòu)計(jì)算機(jī))
該浮點(diǎn)環(huán)境雙精度擴(kuò)展格式符合IEEE雙精度擴(kuò)展格式的定義。該浮點(diǎn)環(huán)境的擴(kuò)展雙精度格式共80位,占3個(gè)連續(xù)32位字,包含四個(gè)構(gòu)成字段:63位的小數(shù)f,1位顯式前導(dǎo)有效位(explicit leading significand bit)j,15位偏置指數(shù)e,和1位符號位s。將這3個(gè)連續(xù)的32位字整體作為一個(gè)96位的字,進(jìn)行重新編號。其中0:63包含63位的小數(shù)f,第63位包含前導(dǎo)有效位j,64:78位包含15位的偏置指數(shù)e,最高位第79位包含符號位s。
在Intel結(jié)構(gòu)系計(jì)算機(jī)中,這些字段依次存放在十個(gè)連續(xù)的字節(jié)中。但是,由于 UNIX System V Application Binary Interface Intel 386 Processor Supplement (Intel ABI) 要求雙精度擴(kuò)展參數(shù),從而占用堆棧中3個(gè)相連地址的32位字,其中最高一個(gè)字的高16位未被使用,如圖4所示。
圖4 擴(kuò)展雙精度存儲格式(Intel x86結(jié)構(gòu)計(jì)算機(jī))
地址最低的32位字存放小數(shù)f的低32位,即f[31:0]。其中第0位存放整個(gè)小數(shù)f的最低有效位LSB 第31位存放小數(shù)低32位的最高有效位MSB。
地址居中的32位字,第0到30位存放小數(shù)f的31位最高位,即f[62:32]。其中第0位存放31位最高小數(shù)位的最低有效位LSB,第30位存放整個(gè)小數(shù)的最高有效位,地址居中的32位字的最高位第31位存放顯式的前導(dǎo)有效位j。
地址最高32位字里,第0到14位存放15位的偏置指數(shù)e,第0位存放偏置指數(shù)的最低有效位LSB,第14位存放最高有效位MSB,第15位存放符號位s。雖然地址最高的32位字的高16位在Intel x86結(jié)構(gòu)系列機(jī)種未被使用,但他們對符合Intel ABI的規(guī)定來說,是必需的。
4 總結(jié)
以上討論了Intel x86、Power PC和SPARC平臺上使用的三種IEEE 754浮點(diǎn)數(shù)格式及其存儲格式,下面對浮點(diǎn)數(shù)的相關(guān)參數(shù)進(jìn)行總結(jié),具體見表2。
參考文獻(xiàn)
[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] . 北京:機(jī)械工業(yè)出版社,1999.275~321
評論