diff --git a/homework/chapter2/97.c b/homework/chapter2/97.c index 0a22752..b18165a 100644 --- a/homework/chapter2/97.c +++ b/homework/chapter2/97.c @@ -20,26 +20,9 @@ float_bits float_i2f(int i) { s = 0x80000000U; } - int hb = 0, t = i; - if (t >> 16) { - t = t >> 16; - hb = hb + 16; - } - if (t >> 8) { - t = t >> 8; - hb = hb + 8; - } - if (t >> 4) { - t = t >> 4; - hb = hb + 4; - } - if (t >> 2) { - t = t >> 2; - hb = hb + 2; - } - if (t >> 1) { - t = t >> 1; - hb = hb + 1; + int hb = 30; + while (!(i >> hb)) { + hb = hb - 1; } i = i ^ (1 << hb); diff --git a/homework/chapter2/README.md b/homework/chapter2/README.md index b42bfe7..124ade3 100644 --- a/homework/chapter2/README.md +++ b/homework/chapter2/README.md @@ -33,6 +33,4 @@ b&=(a+x_{w-1}\cdot y+y_{w-1}\cdot x)\bmod 2^w\\ 先得到粗糙的结果 `(x >> 2) + ((x >> 2) << 1)`,再根据 `x & 3` 以及 $x$ 的符号(决定舍入方向)进行修正。 ## 2.97 -注意以下细节: -- 使用“折半递归法”求 $i$ 的有效位数可以避免对于所有 $2^{32}$ 个 `int` 检验花费极长的时间; -- 在某些情况下,舍入会导致有效位数增加。 \ No newline at end of file +注意在某些情况下,舍入会导致有效位数增加。 \ No newline at end of file