数制与编码
一、浮点数的表示
- N = r E ∗ M \displaystyle N=r^E*M N=rE∗M
- E是阶码,M是尾数,r是阶码的底,默认为 r = 2 \displaystyle r=2 r=2
J f J_f Jf | J 1 J 2 . . . J m J_1J_2...J_m J1J2...Jm | S f S_f Sf | S 1 S 2 . . . S m S_1S_2...S_m S1S2...Sm |
---|---|---|---|
阶符 | 阶码的数值部分 | 数符 | 尾数的数值部分 |
1.阶码
- 用补码或者移码表示,用于表示范围
2.尾数
- 用原码或者补码表示,尾数的位数反映精度
二、规格化浮点数
- 含义:尾数最高位必须是个有效值,也就是不为0
1.左规
- 当运算结果尾数最高位为0时,尾数数值部分全体左移一位,阶码减一
2.右规
- 当运算结果发生符号位溢出时,尾数部分全体右移一位,阶码加一
三、IEEE754标准
1.规则概念
- 自动省略尾数数值最高位的1
数符 | 移码表示阶码 | 尾数数值位用原码表示 |
---|
-
位数表
数符 阶码 尾数数值 总位数 偏移量 短浮点数 1 8 23 32 127 长浮点数 1 11 52 64 1023 临时浮点数 1 15 64 80 16383 -
真值表示
短浮点数: ( − 1 ) 数 符 ∗ 1. M ∗ 2 E − 127 (-1)^{数符}*1.M *2^{E-127} (−1)数符∗1.M∗2E−127
长浮点数: ( − 1 ) 数 符 ∗ 1. M ∗ 2 E − 1023 (-1)^{数符}*1.M *2^{E-1023} (−1)数符∗1.M∗2E−1023
2.一些规定
- E = 0 且 M = 0 , 真 值 为 0 E=0且M=0,真值为0 E=0且M=0,真值为0
- E = 0 且 M 不 等 于 0 , 为 非 规 格 化 数 。 真 值 = ( − 1 ) 数 符 ∗ 0. M ∗ 2 126 E=0且M不等于0,为非规格化数。真值=(-1)^{数符}*0.M *2^{126} E=0且M不等于0,为非规格化数。真值=(−1)数符∗0.M∗2126
- 254 ≥ E ≥ 1 时 , 正 常 计 算 真 值 \displaystyle254\geq E \geq 1时,正常计算真值 254≥E≥1时,正常计算真值
- E = 255 且 M ≠ 0 时 , 真 值 为 N a N E=255且M≠0时,真值为NaN E=255且M=0时,真值为NaN
- E = 255 且 M = 0 时 , 真 值 为 正 负 无 穷 ( 看 符 号 ) E=255且M=0时,真值为正负无穷(看符号) E=255且M=0时,真值为正负无穷(看符号)
四、浮点数加减运算
- X = − 5 256 , Y = + 59 1024 , 按 补 码 进 行 X − Y 运 算 , 阶 符 取 2 位 , 阶 码 取 3 位 , 数 符 取 2 位 , 尾 数 取 9 位 \displaystyle X=-\frac{5}{256},Y=+\frac{59}{1024},按补码进行X-Y运算,阶符取2位,阶码取3位,数符取2位,尾数取9位 X=−2565,Y=+102459,按补码进行X−Y运算,阶符取2位,阶码取3位,数符取2位,尾数取9位
1.真值到机器数转换
-
X = − 101 ∗ 2 − 8 X=-101*2^{-8} X=−101∗2−8 Y = + 111011 ∗ 2 − 10 Y=+111011*2^{-10} Y=+111011∗2−10
X = − 0.101 ∗ 2 − 5 X=-0.101*2^{-5} X=−0.101∗2−5 Y = + 0.111011 ∗ 2 − 4 Y=+0.111011*2^{-4} Y=+0.111011∗2−4
X = − 0.101 ∗ 2 − 101 X=-0.101*2^{-101} X=−0.101∗2−101 Y = + 0.111011 ∗ 2 − 100 Y=+0.111011*2^{-100} Y=+0.111011∗2−100 -
X = 11011 , 11.011000000 X=11011, 11.011000000 X=11011,11.011000000
-
Y = 11100 , 00.1111011000 Y=11100,00.1111011000 Y=11100,00.1111011000
2.对阶(小阶变大阶)
- [ x ] 补 + [ − y ] 补 = 11011 + 00100 = 111111 [x]_{补}+[-y]_{补}=11011+00100=111111 [x]补+[−y]补=11011+00100=111111
- 阶码差为-1
3.尾数加减
- 尾数进行 [ x ] 补 + [ − y ] 补 [x]_{补}+[-y]_{补} [x]补+[−y]补
4.规格化
- 将得到结果进行规格化
5.舍入
①0舍1入法
- 类似十进制的四舍五入
右移时,移去0,则舍去
右移时,移去1,则尾数加1,可能尾数又溢出,此时再做一次右规
②恒置1法
- 右移不论去1还是0,都把尾数末尾置1
6.溢出判断
- 阶码上溢,需进行中断处理
- 阶码下溢,按机器0处理