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

use*_*202 2 math floating-point precision ieee-754

我正在看几本教科书,包括Trefethen 和 Bau 的《数值线性代数》,在浮点算术部分中,他们似乎说在 IEEE-754 中,归一化浮点数采用形式.1.... X 2^e。也就是说,假定尾数在 0.5 到 1 之间。

然而,在这个流行的在线浮点计算器中,解释了标准化浮点数的尾数在1和2之间。

有人可以告诉我哪个是正确的方法吗?

Eri*_*hil 6

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

\n
    \n
  • { (\xe2\x88\x921) s \xe2\x80\xa2 f \xe2\x80\xa22 e | s \xe2\x88\x88 {0, 1},f是第一个数字后面有小数点的 24 位二进制数字的值,e一个整数,使得 \xe2\x88\x92126 \xe2\x89 \xa4 e \xe2\x89\xa4 127 }。
  • \n
  • { (\xe2\x88\x921) s \xe2\x80\xa2 f \xe2\x80\xa22 e | s \xe2\x88\x88 {0, 1},f是第一个数字之前有小数点的 24 位二进制数字的值,e一个整数,使得 \xe2\x88\x92125 \xe2\x89 \xa4 e \xe2\x89\xa4 128 }。
  • \n
  • { (\xe2\x88\x921) s \xe2\x80\xa2 f \xe2\x80\xa22 e | s \xe2\x88\x88 {0, 1},f是最后一位后面有小数点的 24 位二进制数字的值,e整数,使得 \xe2\x88\x92149 \xe2\x89 \xa4 e \xe2\x89\xa4 104 }。
  • \n
  • { f \xe2\x80\xa22 e | f是一个整数,使得 | f | < 2 24,并且e是一个整数,使得 \xe2\x88\x92149 \xe2\x89\xa4 e \xe2\x89\xa4 104 }。
  • \n
\n

换句话说,我们可以将小数点放在我们想要的有效数中的任何位置,只需调整指数的范围即可进行补偿。可以为了方便或偏好而选择使用哪种形式。

\n

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

\n

IEEE 754 主要使用第一种形式。它将其称为 \xe2\x80\x9ca 科学形式,\xe2\x80\x9d 反映了这样一个事实:在科学计数法中,我们通常在第一个数字后面写一个小数点,如 \xe2\x80\ x9c地球的质量约为 5.9722\xe2\x80\xa210 24 kg。\xe2\x80\x9d 在第 3.3 条中,IEEE 754-2008 提到 \xe2\x80\x9c 为了某些目的将有效数视为整数; 在这种情况下,有限浮点数的描述如下:\xe2\x80\x9d,后跟与上面第三种形式等效的文本,只不过它是通用的(基数和其他参数是任何浮点格式的任意值,而不是比我上面专门用于 binary32 格式的常量)。

\n

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

\n