跳转至

浮点加法器

本节思考题为必做,浮点加法器实现为选做 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,你将得到什么结果?
    • 请结合浮点数定义,解释两者差异。

你实现的浮点加法器至少需要满足以下要求:

  • 自行决定实现单精度或双精度。
  • (为简化实验)检测两个操作数,只要有一个为不规则浮点数,输出一个不规则结果即可。
  • 对于两个规则浮点数的运算,推荐有以下步骤:
    • 浮点数对阶;
    • 运算;
    • 结果规则化;
    • 简单的舍入处理;

可实现多个标准规范的舍入处理已获得更多加分。