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

标签 math floating-point precision ieee-754

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

但是,在这个popular online floating point calculator , 说明归一化 float 的尾数在 1 和 2 之间。

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

最佳答案

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

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

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

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

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

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

关于math - 对于 IEEE-754 浮点运算,尾数是在 [0.5, 1) 还是 [1, 2) 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67797756/

相关文章:

math - 限制相机间距

c++ - 如何不出错地除以零

sql - pyspark sql float精度错误

java - 是否有计算任何一天是哪一天的公式?我被欧拉计划 #19 困住了

algorithm - 需要什么类型的数学来理解算法的时间和空间复杂性?

java - 如何修复 Jama 中的 ArrayIndexOutOfBounds 错误?

c++ - 快速找到以 2 为底的对数的整数部分

c printf 有符号 float

java - 在 Java 中以可变精度(不四舍五入)打印 double

c - 使用 atan C 截断 double