浮点加法器
本节思考题为必做,浮点加法器实现为选做 bonus。
思考题
请结合理论课所学,回答以下问题:
- 双精度浮点数
x, y, z
,若x = -1.5e38, y = 1.5e38, z=1.0
(x+y)+z = ?
;x+(y+z) = ?
;- 两者有区别吗?请解释你的回答。
- 假设使用单精度浮点数,编写以下代码
float x = SOME_VALUE_0; float sum = 0.0f; for(int i = 0; i < SOME_VALUE_1; ++i) sum += x; printf("%f\n", sum - 100.0f);
- 如果
SOME_VALUE_0 := 0.1, SOME_VALUE_1 := 1000
,你将得到什么结果? - 如果
SOME_VALUE_0 := 0.125, SOME_VALUE_1 := 800
,你将得到什么结果? - 请结合浮点数定义,解释两者差异。
- 如果
你实现的浮点加法器至少需要满足以下要求:
- 自行决定实现单精度或双精度。
- (为简化实验)检测两个操作数,只要有一个为不规则浮点数,输出一个不规则结果即可。
- 对于两个规则浮点数的运算,推荐有以下步骤:
- 浮点数对阶;
- 运算;
- 结果规则化;
- 简单的舍入处理;
可实现多个标准规范的舍入处理已获得更多加分。