Skip to content

浮点数系统与 IEEE 754

Floating-point system · IEEE 754

以有限尾数和指数表示机器数,并说明 IEEE 754 的特殊值、格式与运算语义。

条目类型
模型

形式陈述

理想化浮点系统由基数 β2、精度 p 和指数范围 emineemax 决定。一个非零正规数写成

x=(1)s(d0.d1dp1)ββe,d00,0di<β.

有限的尾数和指数使可表示集合成为有限集合,而不是实数连续统。IEEE 754-2019 规定多种二进制和十进制交换格式、舍入方向、异常状态,以及加减乘除、平方根和融合乘加等操作的结果要求。标准列出的五种舍入方向是 roundTiesToEven、roundTiesToAway、roundTowardPositive、roundTowardNegative 与 roundTowardZero;默认方向是 ties-to-even。常见 binary64 具有 1 个符号位、11 个指数位和 53 位有效二进制精度;“IEEE 754”并不等同于这一种格式。

binary64 的正规有限数范围是

21022|x|(2252)21023,

最小正次正规数则为 21074。正规数把最高有效位隐含为 1;次正规数固定使用最小指数并允许这个最高位为 0,所以相邻点间距保持 21074,有效相对精度却随数值靠近零而下降。

除正规数外,标准还包含正负零、次正规数、正负无穷和 NaN。渐进下溢使结果从最小正规数平滑进入次正规区,而不是直接跳到零;无穷可来自除零或某些溢出,具体溢出结果还取决于舍入方向;NaN 承载无效运算,不是实数,普通比较也不形成实数式全序。符号零比较时数值相等,却可在 1/(+0)=+1/(0)= 等运算中保留方向信息。

异常默认可以非停机地交付结果,并置起 invalid、divisionByZero、overflow、underflow 或 inexact 状态标志;语言和运行时未必向应用暴露全部标志。quiet NaN 通常传播,signaling NaN 用于触发 invalid,但 NaN 负载如何保留不应被当作跨平台算法接口。IEEE 754 还规定 totalOrder 一类排序谓词;普通 <== 并不会自动获得这套总序语义。

对受标准约束的基本运算,“正确舍入”表示先取精确数学结果,再按当前舍入方向选择规定的机器结果;它不表示任意复合表达式只发生一次舍入。融合乘加把 ab+c 作为一个操作只舍入一次,拆成乘法和加法则通常经历两次舍入,因此两种执行路径可能给出不同末位。

标准规定的是格式与运算语义,不完全决定一段源代码的每个中间值。表达式求值还可能受到语言规则、编译器重排、融合乘加、寄存器扩展精度和硬件模式影响。严谨误差分析应先声明采用的算术模型,再说明实现与模型可能不同之处。

直觉

浮点数像一把刻度会随数值大小伸缩的尺子。同一指数区间内刻度近似等距;指数增加一位后,相邻数的间距也乘以 β。因此机器数在零附近密、在大数附近疏,不能把它想成实轴上固定小数位数的均匀网格。

十进制 0.1 在二进制中循环展开,和 1/3 不能有限十进制表示是同一现象。最近舍入的 binary64 值恰为

360287970189639736028797018963968=0.10000000000000000555,

后续运算处理的是这个机器数,而不是符号文本背后的精确有理数 1/10。十进制打印器常选择能往返恢复同一位模式的最短字符串,所以屏幕显示 0.1 并不意味着内部误差为零。

例子与边界

binary64 在 1 附近的下一个可表示数是 1+252,而在 253 附近相邻间距已经是 2。所以所有绝对值不超过 253 的整数都能精确表示,但 2^53 + 1 不能作为新的 binary64 整数落点;“double 能精确保存整数”必须带范围。

最小正规数以下的次正规区域使用固定间距,牺牲相对精度以保留逐渐下溢。这里常用的统一相对误差模型可能失效,却仍可给出以 21074 为格距的绝对误差界。IEEE 所说的 underflow 通常还要求结果既 tiny 又 inexact;“产生了次正规数”与“置起 underflow 标志”不是完全相同的事件。若硬件启用 flush-to-zero 或 denormals-are-zero,实际行为又会偏离渐进下溢假设。

NaN 的边界尤其重要:NaN == NaN 为假,普通 < 比较也不提供总序。排序、最值和几何谓词若没有先规定 NaN 策略,即使其离散算法在实数全序上正确,也没有完整的浮点输入规格。

推论与应用

浮点格式只回答“哪些值可以存、基本运算怎样返回机器结果”。局部间距、舍入误差和 unit roundoff 由舍入、机器精度与 ulp展开;多步运算的标准黑箱模型见浮点算术标准误差模型

FFT、线性规划和方向判定等算法页面应引用共同的机器数语义,再讨论自身的误差传播或鲁棒性;把 IEEE 754 的全部特殊情形复制进每个算法页既容易不一致,也会遮住算法本身的结构。

参考资料
  • IEEE Computer Society, IEEE Standard for Floating-Point Arithmetic, IEEE Std 754-2019, 2019, DOI: 10.1109/IEEESTD.2019.8766229.
  • David Goldberg, “What Every Computer Scientist Should Know About Floating-Point Arithmetic,” ACM Computing Surveys 23(1), 1991, pp. 5–48, DOI: 10.1145/103162.103163.
  • Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd ed., SIAM, 2002, Ch. 2.
关系图谱14 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组