前言: 上次学习汇编语言(清华大学 张悠慧)是在11月26日,内容是IEEE 754(浮点数表示)。当时撇下了一道题,等度过了12月(英语六级+本科阶段的最后考试+最后的大作业)再把汇编捡起来。现在正是把这个题目捡起来的时候。
11月26日的学习笔记:点击这里进入CSDN链接
2020年4月3日得到指正,重新修改此文。
题目
给定一个浮点格式(IEEE 754),有k位指数和n位小数,对于下列数,写出阶码E、尾数M、小数f和值V的公式。另外,请描述其位表示。
- 数5.0;
- 能够被准确描述的最大奇数;
- 最小的正规格化数。
解决
前置知识一:IEEE 754
IEEE 754约定,计算机中浮点数二进制表示为:
数字形式: ( − 1 ) s M 2 E (-1)^s M 2^E (−1)sM2E
- 符号:s
- 尾数:M,是一个位于区间[1.0, 2.0)内的小数
- 阶码:E
编码形式:
| s | exp | frac |
|---|
exp域:E(注意,E要进行变换,再存储在exp中);
frac域:M。
前置知识二:规格化浮点数(Normalized)
这里讨论到规格化浮点数(Normalized):
- 满足条件:exp不全为0且不全为1。
- 真实的阶码值需要减去一个偏置(biased)量:
-
- E = Exp - Bias
-
- Exp:exp域所表示的无符号数值
-
- Bias的取值:
-
-
- 单精度数:127(Exp:1…254,E:-126…127)
-
-
-
- 双精度数:1023(Exp:1…2046,E:-1022…1023)
-
-
-
- Bias = 2^{e-1} - 1,e = exp的域的位数
-
- frac的第一位隐含1:M = 1.xxx…x_2
-
- 因此第一位的“1”可以省去,xxx…x:bits of frac
-
- Minimum when 000…0 (M = 1.0)
-
- Maximum when 111…1 (M = 2.0 - \epsilon)
前置工作一:整理变量关系
B i a s = 2 e − 1 − 1 Bias = 2^{e-1} - 1 Bias=2e−1−1
E = e x p − B i a s E = exp - Bias E=exp−Bias
V = ( − 1 ) s M 2 E V = (-1)^s M 2^E V=(−1)sM2E
则E为 d e c ( e x p ) − ( 2 e − 1 ) dec(exp) - (2^{e} - 1) dec(exp)−(2e−1)
E最大值为 2 e − 1 − 1 − ( 2 e − 1 − 1 ) = 2 e − 1 − 1 2^e - 1 - 1 - (2^{e-1} - 1)= 2^{e-1} - 1 2e−1−1−(2e−1−1)=2e−1−1。(为什么不是 2 e − 1 − ( 2 e − 1 − 1 ) 2^e - 1 - (2^{e-1} - 1) 2e−1−(2e−1−1)呢?因为有规定:exp全部取1为“非规格化浮点数”,因此规格化浮点数中exp不能全部取1,顶多为(1)*(0))
E的最小值为 1 − ( 2 e − 1 − 1 ) = 2 − 2 e − 1 1-(2^{e-1}-1)=2-2^{e-1} 1−(2e−1−1)=2−2e−1。(为什么不是 0 − ( 2 e − 1 − 1 ) 0-(2^{e-1}-1) 0−(2e−1

本文详细解析了IEEE 754浮点数格式,介绍了如何计算阶码E、尾数M、小数f和值V,并给出了数0.5、最大奇数和最小正规格化数的求解过程,同时阐述了规格化浮点数的位表示和相关特性。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



