34 lines
1.2 KiB
Markdown
34 lines
1.2 KiB
Markdown
## 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
|
|
注意在某些情况下,舍入会导致有效位数增加。 |