2025-07-23 21:12:13 +08:00

1.3 KiB

2.65

定义一次操作为将 w 位的整数 x 从中间分成两个 \frac{w}{2} 位的整数 y 和 $z$,接着令 x=y^z。进行该操作 5 次后得到答案。

我们将这样的思路称为“折半递归法”。

2.66

第一次操作,我们令 x = x | (x >> 1),这样 x 的最高位所在 1 连续段长度必然不小于 2。

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