## 2.65 定义一次操作为将 $w$ 位的整数 $x$ 从中间分成两个 $\frac{w}{2}$ 位的整数 $y$ 和 $z$,接着令 `x=y^z`。进行该操作 5 次后得到答案。 我们将这样的思路称为“折半递归法”。 ## 2.66 第一次操作,我们令 `x = x | (x >> 1)`,这样 $x$ 的最高位所在 `1` 连续段长度必然不小于 2。 第二次操作,令 `x = x | (x >> 2)`,依次类推。通过 5 次操作即可实现提示中的转换。 ## 2.75 $x,y$ 是补码数,$x'=T2U_w(x),y'=T2U_w(y)$。 $$ \begin{aligned} x'\cdot y'&=(x+x_{w-1}\cdot 2^w)\times(y+y_{w-1}\cdot 2^w)\\ &=x\cdot y+(x_{w-1}\cdot y+y_{w-1}\cdot x)2^w+x_{w-1}\cdot y_{w-1}\cdot 2^{2w} \end{aligned}$$ 进一步,令 `a = signed_high_prod(x, y), b = unsigned_high_prod(x', y')`,有 $$b\cdot 2^w+x'*^u_w y'=a\cdot 2^w+T2U_w(x*^t_wy)+(x_{w-1}\cdot y+y_{w-1}\cdot x)2^w+x_{w-1}\cdot y_{w-1}\cdot 2^{2w}$$ 化简得 $$b=a+x_{w-1}\cdot y+y_{w-1}\cdot x+x_{w-1}\cdot y_{w-1}\cdot 2^w$$ 即 $$\begin{aligned} b&=(a+x_{w-1}\cdot y+y_{w-1}\cdot x)\bmod 2^w\\ &=T2U_w(a)+^u_t x_{w-1}\cdot y'+^u_t y_{w-1}\cdot x' \end{aligned}$$ ## 2.80 先得到粗糙的结果 `(x >> 2) + ((x >> 2) << 1)`,再根据 `x & 3` 以及 $x$ 的符号(决定舍入方向)进行修正。 ## 2.97 注意以下细节: - 使用“折半递归法”求 $i$ 的有效位数可以避免对于所有 $2^{32}$ 个 `int` 检验花费极长的时间; - 在某些情况下,舍入会导致有效位数增加。