对于 IEEE-754 浮点运算,尾数是在 [0.5, 1) 还是 [1, 2) 中?

For IEEE-754 floating point arithmetic, is the mantissa in [0.5, 1) or in [1, 2)?

我看了好几本教科书,包括 Trefethen 和 Bau 的数值线性代数,在浮点运算部分,他们似乎在 IEEE-754 中说,规范化浮点数采用 .1.... X 2^e 的形式。即假设尾数在0.5到1之间。

然而,在这个popular online floating point calculator中,解释了归一化浮点数的尾数在1和2之间。

谁能告诉我哪个是正确的方法?

所有的方法都是正确的。以下集合相同:

  • { (−1)sf•2 e | s ∈ {0, 1},f是一个24位二进制数的值,第一个数字后有小数点,e 是满足 −126 ≤ e ≤ 127 }.
  • 的整数
  • { (−1)sf•2 e | s ∈ {0, 1},f是一个24位二进制数的值,小数点在第一个数字之前,e 是满足 −125 ≤ e ≤ 128 }.
  • 的整数
  • { (−1)sf•2 e | s ∈ {0, 1}, f 是一个24位二进制数的值,小数点在最后一位后, e 是满足 −149 ≤ e ≤ 104 }.
  • 的整数
  • { f•2e | f 是一个整数使得 |f| < 224,并且 e 是一个整数,使得 −149 ≤ e ≤ 104 }.

换句话说,我们可以将小数点放在我们想要的有效数字的任何位置,只需通过调整指数的范围来补偿。可以根据方便或偏好选择使用哪种形式。

第三种形式对有效数进行缩放,使其成为整数,第四种形式将符号合并到有效数中。这种形式便于使用数论分析浮点行为。

IEEE 754多采用第一种形式。它将此称为“一种科学形式”,反映了这样一个事实,即在科学记数法中,我们通常在第一位数字后面写一个小数点,如“地球的质量约为 5.9722•1024 公斤。”在第 3.3 条中,IEEE 754-2008 提到“出于某些目的,将有效数字视为整数也很方便;在这种情况下,有限浮点数是这样描述的:”,后跟等同于上面第三种形式的文本,除了它是通用的(基数和其他参数是任何浮点格式的任意值,而不是我使用的常量以上专门针对 binary32 格式)。

C 标准以第二种形式描述数字(对于任何基数,不一定是二),小数点在第一个数字之前,其 frexp 函数提供的指数与此比例匹配。