2.2.4 四倍精度格式
浮点环境的四倍精度格式同样符合双精度扩展格式的 IEEE 定义。 此格式不在 x86 的 Oracle Solaris Studio C/C++ 编译器中。四倍精度格式占用 32 位字并包含以下三个字段:112 位小数 f;15 位偏置指数 e;以及 1 位符号 s。这三个字段是连续存储的,如下图所示。
地址最高的 32 位字包含小数的 32 位最低有效位,用 f[31:0] 表示。紧邻的两个 32 位字分别包含 f[63:32] 和 f[95:64]。下面的 0:15 位字包含小数的 16 位最高有效位 f[111:96],其中第 0 位是这 16 位的最低有效位,而第 15 位是整个小数的最高有效位。16:30 位包含 15 位偏置指数 e,其中第 16 位是该偏置指数的最低有效位,而第 30 位是最高有效位;第 31 位包含符号位 s。
下图将这四个连续的 32 位字按一个 128 位字那样进行了编号,其中 0:111 位存储小数 f;112:126 位存储 15 位偏置指数 e;而第 127 位存储符号位 s。
图 2-3 四倍精度格式
f、e 和 s 三个字段中的位模式的值将决定整个位模式所表示的值。
Table 2–6 显示了三个组成字段的值与四倍精度格式位模式表示的值之间的对应关系。u 意味着“无关”,因为指示字段的值与确定特定位模式的值无关。
表 2-6 位模式表示的值
|
|
0 < e < 32767 |
(–1) s × 2 e–16383 × 1. f(正规数) |
e = 0, f ≠ 0
(f 中至少有一位不为零) |
(–1) s × 2 –16382 × 0. f(次正规数) |
e = 0, f = 0
(f 中的所有位均为零) |
(–1)s × 0.0(有符号的零) |
s = 0, e = 32767, f = 0
(f 中的所有位均为零) |
|
s = 1, e = 32767; f = 0
(f 中的所有位均为零) |
-INF(负无穷大) |
s = u, e = 32767, f ≠ 0
(f 中至少有一位不为零) |
NaN(Not-a-Number,非数值) |
|
Table 2–7 中给出了重要的四倍精度双精度扩展存储格式位模式的示例。第二列中的位模式显示为四个 8 位十六进制数。最左侧的数是地址最低的 32 位字的值,而最右侧的数是地址最高的 32 位字的值。最大正正规数是以四倍精度格式表示的最大有限数。最小正次正规数是以四倍精度格式表示的最小正数。最小正正规数通常称为下溢阈值。(最大和最小正规数和次正规数的十进制值是近似的;对于所示的数字来说,它们是正确的。)
表 2-7 四倍精度格式位模式
|
|
|
+0 |
00000000 00000000 00000000 00000000 |
0.0 |
–0 |
80000000 00000000 00000000 00000000 |
–0.0 |
1 |
3fff0000 00000000 00000000 00000000 |
1.0 |
2 |
40000000 00000000 00000000 00000000 |
2.0 |
最大正规数 |
7ffeffff ffffffff ffffffff ffffffff |
1.1897314953572317650857593266280070e+4932 |
最小正规数 |
00010000 00000000 00000000 00000000 |
3.3621031431120935062626778173217526e–4932 |
最大次正规数 |
0000ffff ffffffff far-off ffffffff |
3.3621031431120935062626778173217520e–4932 |
最小正次正规数 |
00000000 00000000 00000000 00000001 |
6.4751751194380251109244389582276466e–4966 |
+∞ |
7fff0000 00000000 00000000 00000000 |
+∞ |
–∞ |
ffff0000 00000000 00000000 00000000 |
–∞ |
非数字 |
7fff8000 00000000 00000000 00000000 |
NaN |
|
在Table 2–7 中显示的 NaN 十六进制值只是可用于表示 NaN 的众多位模式之一。