问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

IEEE754浮点数表示形式详解

创作时间:
作者:
@小白创作中心

IEEE754浮点数表示形式详解

引用
1
来源
1.
https://www.cnblogs.com/kohler21/p/18240972

IEEE754浮点数标准是计算机科学领域中非常重要的一项技术标准,几乎所有的现代计算机都采用这一标准来表示浮点数。本文将详细介绍IEEE754浮点数的表示形式及其相关概念。

背景与标准

在20世纪80年代初之前,不同厂商的计算机内部浮点数表示形式可能不同,这给数据传送和程序移植带来了很大的不便。为了解决这一问题,美国电气及电子工程师协会(IEEE)于1985年发布了浮点数标准IEEE754。目前,几乎所有计算机都采用这一标准表示浮点数。

IEEE754标准主要包括两种基本的浮点数格式:

  • 32位单精度浮点数:对应C语言中的float型。
  • 64位双精度浮点数:对应C语言中的double型。

核心概念

符号位

符号位取值0表示正数,取值1表示负数。

阶码

阶码采用定点整数表示,使用移码形式。在32位单精度浮点数中,阶码为8位,偏置常数为127(即(2^7-1)),而不是标准移码的128。这种设计是为了避免最小规格化数的倒数溢出。

尾数

尾数采用定点小数表示,使用原码形式。在32位单精度浮点数中,尾数实际有24位,但只保存23位,节省的比特位可用于提高尾数的精度。完整的尾数形式为1.M。

32位单精度浮点数示意图

特殊值

  • NaN(非数):用于表示(\frac {0}{0})、(\frac {∞}{∞})、0×∞、负数的平方根等。
  • 非规格化数:用于处理阶码下溢,使得出现比最小规格化数还小的数时程序也能继续进行下去。
  • 无穷大数:引入无穷大数可使计算过程出现异常的情况下程序能继续执行,并且可为程序提供错误检测功能。

32位与64位浮点数对比

实例分析

例题1

将十进制数408.6875转换成IEEE754单精度浮点数的十六进制机器码。

例题2

若C1830000是某个IEEE754单精度浮点数的十六进制机器码,求其对应的十进制值。

历年考试题

  • 2011年题13:float型变量x=-8.25在32位浮点寄存器FR1中的内容是(A)。
  • 2013年题13:C640000H表示的数是(A)。
  • 2014年题14:(f1)=CC900000H, (f2)=B0C00000H时,x和y之间的关系是(A)。
  • 2022年题14:-0.4375的IEEE754单精度浮点数表示为(A)。

表示范围

  • 最大正整数:(2^{128}-2^{104})
  • 最小的规格化正数:(1.0 \times 2^{-126})

注意事项

对于无限循环小数,通常只能采用舍入的方式近似表示,这会带来数据表示的误差。这种误差会在计算的过程中不断累积放大,可能导致严重后果。因此,在使用二进制浮点数编程时,一定要充分考虑浮点数运算可能带来的计算误差,尽量避免对浮点数进行直接比较,在一些对误差极其敏感的情况下,建议采用十进制浮点数进行运算。

扩展阅读

  • 计算机基础知识之原码、补码、反码和移码
  • 计算机基础知识之浮点数的表示
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号