什么是最大的非规范化和标准化数字?(64位,IEEE 754-1985)

时间:2013-11-19 07:14:34

标签: floating-point binary floating-accuracy ieee-754 denormalization

我正在使用浮点运算,因为我真的想要理解这个主题!

我知道这些数字可以用科学记数法表示。

因此对于这两个数字,指数应如下所示:

非规范化数字: 11 .... 11 so(1 + 1/2 + 1/2 ^ 2 + ... + 1/2 ^ 52)* 2 ^ 1023

标准化数字: 11 .... 11 so(1 + 1/2 + 1/2 ^ 2 + ... + 1/2 ^ 52)* 2 ^ 1024

但是,我不确定这是否正确?

我真的很感激你的回答!

PS。:维基百科上的数字是given!但是,我不知道他们是怎么想出来的......

1 个答案:

答案 0 :(得分:7)

如您所知,双精度格式如下所示:

enter image description here

理解非规范化数字的关键是它们实际上不是浮点数,而是使用未使用“正常”格式的表示形式的定点微格式。

正常浮点数的格式为:m*2^e其中e通过从上面的指数字段中减去偏差而得到mm*2^e是1到2之间的数字,其中'二进制'点之后的位由上面的分数给出。不存储二进制点前面的1,因为已知它始终为1.指数字段的值为1到2046.值0(全零)和2047(全1)保留用于特殊用途

指数字段中的所有字母表示我们有无穷大或NaN(非数字)。

所有零意味着我们正在处理非正规浮点数。它们的格式仍为m,但em的值不同。 e现在是介于0和1之间的数字,因此在二进制点前面有一个0而不是正常数字的1。 {{1}}始终具有相同的值:-1022。所以指数是一个常数,这就是我之前称之为定点格式的原因。

因此,每个可能的最大值是:

  • 正常:(1 + 1/2 + 1/2 ^ 2 + ... + 1/2 ^ 52)* 2 ^ 1023 =(2-2 ^ -52)* 2 ^ 1023 = 1.797 ... E + 308
  • 非常规:( 0 +1/2 + 1/2 ^ 2 + ... + 1/2 ^ 52)* 2 ^ -1022 =(1-2 ^ -52)* 2 ^ -1022 = 2.225 ... e-308