2.65
一次操作将 w
位的整数 x
从中间分成两个 \frac{w}{2}
位的整数 y
和 $z$,接着令 x = y ^ z
。进行该操作 5 次后得到答案。
我们将这样的思路称为“折半递归法”。
2.66
第 k
次操作,令 x = x | (x >> (1 << (k - 1)))
。通过 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
注意在某些情况下,舍入会导致有效位数增加。