IEEE 浮点表示

基本概念

形如x * 2y这样的数,可以通过给定 x 和 y 的值来表示。
IEEE 浮点标准用 V = ( − 1 ) s ∗ M ∗ 2 E V = (-1)^s * M * 2^E V=(1)sM2E 的形式来表示一个数:

  • 符号(sign) s 决定这个数是正数还是负数(s=0正数,s=1负数)。
  • 尾数(significand)M是一个二进制小数。
  • 阶码(exponent)E的作用是对浮点数加权,权重是2的E次幂。

下图分别表示(C语言中)单精度浮点float 和双精度浮点 double的表示格式。
C语言浮点数表示

  • float格式中,s、exp、和frac字段分别为1位、k=8位和n=23位,得到一个32位的表示。
  • double格式中,s、exp、和frac字段分别为1位、k=11位和n=52位,得到一个64的表示。

给定了位表示,根据exp的值,被编码的值可以分成三种不同的情况。
C语言浮点数表示

情况1:常规值

也就是最普遍的情况。exp 的位模式不全是0,也不全是1(单精度数值为255,双精度值为2047)。阶码的值为 E = e - Bias
e 是无符号数,位表示为: ek-1 … e1e0 因此它的值在 1 ~ 254 之间(单精度),1~2046之间(双精度);
Bias 是偏置值:等于 2k-1 - 1 (单精度是127,双精度是1023)
因此,E 的值就可以得到一个范围(包含边界): -126 ~ 127(单精度),-1022 ~ 1023(双精度)
小数字段 frac 被解释为描述小数值 f0 ≤ f ≤ 1
二进制表示为 0.fn-1 … f1f0
由此尾数被定义为 M = 1 + f (也叫做隐含的以1开头的表示)

情况2:非常规的值

当阶码全都为0时,所表示的数是非规格化的形式。
阶码值是 E = 1 - Bias
尾数值是 M = f,也就是小数字段的值,不包含隐含的1。

情况3:特殊值

当阶码位全为1时,表示特殊值。

  • 无穷大:阶码位全为1,小数位全为0
  • NaN:表示不是一个数(Not a Number),即阶码位全为1,小数位不全为0。

表示方法

示例1

以一个6位二进制为固定长度的范围。来表示一些数,这样方便我们更好的理解。假定s、exp、frac字段分别为 1位,3位,和2位。
这样我们得到一个6位二进制表示法:s=1,k=3,n=2,我们以此来表示一些数。

示例分析

在表示数之前,我们先来分析一下这个6位的二进制。
由阶码k的位分布情况,能得到常规值,和非常规值。他们是平滑过渡的。
先确定偏置量 Bias = 2k-1 - 1 = 3 (k=3)
下面我们来了解他们能表示的数的范围和值。不考虑符号位。
公式: V = ( − 1 ) 0 ∗ M ∗ 2 E V = (-1)^0 * M * 2^E V=(1)0M2E
请考虑下面的二进制位,符号位的值固定为1,下面的计算都会省略

非常规情况

E = 1 - Bias = -2
M = f
[------] 0 000 00 (最小值的二进制位分布)
V = 0 ∗ 0 = 0 16 V = 0 * 0= \dfrac{0}{16} V=00=160
[------] 0 000 01
V = 1 4 ∗ 1 4 = 1 16 V=\dfrac{1}{4} * \dfrac{1}{4}=\dfrac{1}{16} V=4141=161
[------] 0 000 10
V = 2 4 ∗ 1 4 = 2 16 V=\dfrac{2}{4} * \dfrac{1}{4}=\dfrac{2}{16} V=42

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IEEE浮点表示乘法是指使用IEEE浮点数标准进行两个浮点数的乘法运算。IEEE浮点表示是一种用二进制来表示实数的方法,它有不同的精度(单精度和双精度)和指数范围。 在IEEE浮点表示中,浮点数通常由三部分组成:符号位、指数和尾数。对于乘法运算,可以按照以下步骤进行: 1. 首先,将两个浮点数转换为规格化形式,即符号位都为正号(0或1),指数位进行偏移,使得指数范围能够覆盖需要表示的数值范围,尾数为小数点后的有效数字。 2. 确定乘积的符号位,如果两个浮点数的符号位相同,那么乘积的符号位为正,否则为负。 3. 计算乘积的指数位,将两个浮点数的指数位相加,并减去一个偏移量(在IEEE浮点表示中通常为127或1023)。 4. 计算乘积的尾数,将两个浮点数的尾数相乘,得到一个结果,然后对结果进行规格化,即将小数点移动到正确的位置,并且舍入到指定的位数。 5. 检查结果是否溢出或者下溢。如果乘积的指数位超过了表示范围,或者尾数无法表示,需要进行适当的处理,例如设置为正无穷大、负无穷大或者零。 总的来说,IEEE浮点表示乘法遵循一定的规则和步骤,通过对符号位、指数和尾数进行相应的计算和转换,可以得到两个浮点数的乘积。然而,由于浮点数的固有性质,乘法运算可能引入一定的舍入误差,因此在使用中需要注意精度和运算顺序的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值