首页/计算机组成原理/02-data-representation/IEEE754浮点数标准 🔗 在 Obsidian 中打开
计算机组成原理 · 02-data-representation

IEEE754浮点数标准

重要度 ⭐⭐IEEE754浮点数标准单精度双精度特殊值
速查
单精度 32 位 = 1+8+23,bias=127;双精度 64 位 = 1+11+52,bias=1023。规格化 $V = (-1)^S imes 1.M imes 2^{E-bias}$;阶码全 0 → 0 或非规格化($0.M imes 2^{-126}$),阶码全 1 → ∞(M=0)/ NaN(M≠0)。

核心概念

IEEE 754 是目前最广泛使用的浮点数标准,定义了浮点数的存储格式、运算规则和特殊值。

基本格式:$V = (-1)^S \times 1.M \times 2^{E-bias}$

其中 S 为符号位,M 为尾数(隐含前导 1),E 为阶码(移码表示),bias 为偏置常数。

三种常用格式

格式总位数符号位阶码位数尾数位数偏置常数
单精度 (float)321823127
双精度 (double)64111521023
扩展双精度801156416383

特殊值处理

  • :阶码全 0、尾数全 0,有 +0 和 -0 之分。
  • 无穷大:阶码全 1、尾数全 0,由符号位决定正负。
  • 非数 NaN:阶码全 1、尾数非 0,表示无效运算结果。
  • 非规格化数:阶码全 0、尾数非 0,表示为 $(-1)^S \times 0.M \times 2^{1-bias}$(无隐含前导 1)。

规格化数的真值计算:$V = (-1)^S \times 1.M \times 2^{E-127}$(单精度)。

关键定义

概念定义
隐含前导 1IEEE 754 规格化数的尾数省略整数部分的 1,实际有效位多一位
偏置常数 bias阶码用移码表示时的偏移量,单精度为 127
阶码真值E − bias,其中 E 为存储的阶码值
denormalized numbers阶码全 0 的非规格化数,用于表示接近 0 的极小值
机器精度 ε1.0 与大于 1.0 的最小可表示数之差,单精度为 $2^{-23}$

常见考法

考点说明
十进制转 IEEE 754将十进制数转换为 32 位单精度十六进制表示
IEEE 754 转十进制从 32 位十六进制还原为十进制值
特殊值判断给定十六进制,判断零/无穷大/NaN/规格化/非规格化
表示精度分析单精度/双精度的精度极限、相邻可表示数间距
阶码范围计算最大/最小规格化数的计算
舍入误差分析舍入方式(向零/向最近偶数/向上/向下)对结果的影响

易错点

  • IEEE 754 规格化数有隐含前导 1,实际尾数精度比存储的位数多 1 位。
  • 阶码用移码表示,不是补码;偏置常数是 127(单精度),不是 128。
  • 阶码 E 的存储范围是 1 ~ 254(规格化数),全 0 和全 1 有特殊含义。
  • 计算真值时不要忘记减去偏置常数:真值 = E − 127。
  • 非规格化数没有隐含前导 1,且阶码真值固定为 $1 - bias = -126$。
  • +0 和 -0 在比较时相等,但某些运算中行为不同(如 $1/{+0} = +\infty$,$1/{-0} = -\infty$)。

核心结论

  1. 单精度可表示约 $3.4 \times 10^{38}$ 以内的数,有效位约 7 位十进制数字。
  2. 双精度可表示约 $1.8 \times 10^{308}$ 以内的数,有效位约 16 位十进制数字。
  3. IEEE 754 采用隐含前导 1 技术,在不增加位数的前提下提高 1 位精度。
  4. 非规格化数的存在使 0 到最小规格化数之间的区间可以渐进下溢。
  5. 相邻两个规格化浮点数的间距与该数的大小成正比(相对精度近似恒定)。

记忆卡片

单精度的格式和偏置常数?
32 位:1 符号 + 8 阶码 + 23 尾数,bias=127;真值 $V=(-1)^S \times 1.M \times 2^{E-127}$。
"隐含前导 1"什么意思?
尾数省略整数部分的 1,实际有效位比存储多 1 位 —— 23 位尾数实际 24 位精度。
阶码全 0 / 全 1 表示什么?
全 0:零或非规格化数(无隐含 1,真值阶码固定 -126);全 1:∞(M 全 0)或 NaN(M 非 0)。
+0 与 -0 的区别?
比较时相等,但运算不同:$1/+0=+\infty$,$1/-0=-\infty$。
单/双精度有效十进制位数?
单精度约 7 位(范围 $\approx 3.4 \times 10^{38}$);双精度约 16 位(范围 $\approx 1.8 \times 10^{308}$)。

交互动画 · 特殊值判定器

32 位十六进制 → S / E / M 分段 → 分类判定 SE(8 位)M(23 位) 0 00000000 00000000000000000000000 口诀:E 全 0 → 0/非规格化;E 全 1 → ∞/NaN;否则为规格化数 1.M×2^(E-127)。
点击十六进制编码,观察分段并判定其类型
点击按钮开始

相关知识点

fixed-and-floating-point

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。