update datalab
This commit is contained in:
parent
d30d50bad6
commit
487f19da82
@ -8,16 +8,16 @@ $Tmax$ 的位表示为 `011...11`。注意到 `x+1==~x` 当且仅当 $x=-1$ 或
|
|||||||
## `negate`, `isAsciiDigit`
|
## `negate`, `isAsciiDigit`
|
||||||
略。
|
略。
|
||||||
## `conditional`
|
## `conditional`
|
||||||
我们希望设计这样一个函数 $f(x)$:当 $x=0$ 时 $f(x)=0$,而 $x\neq 0$ 时 $f(x)=-1$。此时可令 `conditional(x, y, z) = (y & f(x)) | (z & ~f(x))`。
|
我们希望设计这样一个函数 $f(x)$:当 $x=0$ 时 `f(x)=0x00000000`,而 $x\neq 0$ 时 `f(x)=0xFFFFFFFF`。此时只需令 `conditional(x, y, z) = (y & f(x)) | (z & ~f(x))`。
|
||||||
|
|
||||||
一个简单的设计是 `f(x) = !x - 1`。
|
一个可行的方案是令 `f(x) = !x - 1`。
|
||||||
## `isLessOrEqual`
|
## `isLessOrEqual`
|
||||||
核心思路是判断 `y - x = y + ~x + 1` 的符号位。需要处理一些细节以规避溢出带来的错误。
|
核心思路是判断 `y - x = y + ~x + 1` 的符号位。需要处理一些细节以规避溢出带来的错误。
|
||||||
## `logicalNeg`
|
## `logicalNeg`
|
||||||
“折半递归法”。
|
“折半递归法”。
|
||||||
## `howManyBits`
|
## `howManyBits`
|
||||||
对于正数 $x$,所求为最大的 $b$ 使得 $x$ 的第 $b-2$ 位为 `1`,而对于负数 $x$,则是最大的 $b$ 使得 $x$ 的第 $b-2$ 位为 `0`。通过令 `x = x ^ ((x >> 31) << 31)`,我们得以仅用考虑 $x$ 为正数的情况。
|
对于正数 $x$,所求为最大的 $b$ 使得 $x$ 的第 $b-2$ 位为 `1`,而对于负数 $x$,则是最大的 $b$ 使得 $x$ 的第 $b-2$ 位为 `0`。通过令 `x = x ^ (x >> 31)`,我们得以仅用考虑 $x$ 为正数的情况。
|
||||||
|
|
||||||
之后使用“折半递归法”。
|
之后使用“折半递归法”。
|
||||||
## `floatScale2`,`floatFloat2Int`,`floatPower2`
|
## `floatScale2`,`floatFloat2Int`,`floatPower2`
|
||||||
仔细分类即可。
|
仔细分类。
|
Loading…
x
Reference in New Issue
Block a user