前言: 上次学习汇编语言(清华大学 张悠慧)是在11月26日,内容是IEEE 754(浮点数表示)。当时撇下了一道题,等度过了12月(英语六级+本科阶段的最后考试+最后的大作业)再把汇编捡起来。现在正是把这个题目捡起来的时候。
11月26日的学习笔记:阅读原文进入CSDN链接
给定一个浮点格式(IEEE 754),有k位指数和n位小数,对于下列数,写出阶码E、尾数M、小数f和值V的公式。另外,请描述其位表示。
IEEE 754约定,计算机中浮点数二进制表示为:
数字形式:
编码形式:
exp域:E(注意,E要进行变换,再存储在exp中);frac域:M。
这里讨论到规格化浮点数(Normalized):
E最大值为。
抛开例题,来看一个例子:
取值范围如下表。
可以看出,若frac有n位,则M可视为;
其中,C是整数,由frac决定,即;
并且C满足。
默认V为正数(即s=0),则可将V表示为:
较为简单,直接解决如下。
5.0 // 转换为二进制 ==>
101 // 进位,直到取最左1 ==>
M = 1.01 // 此时,E = 2
frac = 01 0* // 共n位
exp = E + Bias
= 2 + (2^(k-1) - 1)
则,位的描述为:
s | exp | frac |
---|---|---|
0 | bin(2 + 2^(k-1) - 1) | 01 0000....(共n位, 开头为01, 0补其他位) |
根据前置工作二,进行思考。现在的任务有两个:
下面分类讨论:
情况一:E可以取到n时,
即时,
E取n,C取其能取的最大奇数,即1* 01(保证最右两位是01, 其他位为1)。
情况二:E*取不到n时,
即时(不太可能),
E取最大即,而C取(为了约掉后一项小数)。
承接上文,认为exp为0* 1,frac为0*。
E取最小,即。
十进制即为。
没有找到标准答案,特性与问题是我自己总结的。如果有错误与问题,欢迎通过piperliu@qq.com与我交流讨论。
另,12月确实太忙了,差点失去常规的学习状态,接下来可要复出咯!
编辑器:https://www.mdnice.com/