我正在阅读我的笔记,并发现以下内容:
For every real number there are various ways of representing
it in such a way. Therefore, computers fix two parameters (so
they do not need to be stored, and arithmetic is more
convenient):
- the base b (normally, it is 2, 10 or 16) and
- the position of the decimal (or binary) point (by normalising
the mantissa such that it satisfies 1/b ≤ m < 1)
Example: Normalised representations for r := 12.25 are,
- for b = 2, r = 1 × 0.110001 × 2^4,
- for b = 10, r = 1 × 0.1225 × 10^2 and,
- for b = 16, r = 1 × 0.C4 × 16^1.
你如何计算以 2、10 和 16 为基数的浮点数的值 12.25。我不太确定讲师是如何得出 b = 2、b = 10 和 b = 16 的答案的。
最佳答案
从示例中,您的讲师对“标准化”的定义似乎是将数字表示为 +1 或 -1 乘以某个 x 乘以底数的整数幂,其中 x 是小于 1 的最大值乘积等于表示的数字。此外,x 表示为基数中的数字。
例如,考虑基数 2 中的 12.25。暂时坚持基数 10,我们可以将 12.25 表示为 1×12.25×20 或 1×6.125×21 或 1×3.0625×22 或 1×1.53125×23 或 1×.765625×.765625 24 或 1×.3828125×25,依此类推。其中,我们可以看到 .765625 是符合该形式的小于 1 的最大值。因此,我们将 12.25 表示为 1×.765625×24。然后我们需要将 .765625 转换为基数 2。
您可能在之前的类(class)中已经介绍过,但我们可以这样做:将 .765625 乘以 2(得到 1.53125)并将整数部分 (1) 与分数 (.53125) 分开。将分数乘以 2 (1.0625) 并再次分开(1 和 .0625)。用新的分数(0 和 .125)重复。继续重复直到分数为零或者你有你想要的数字:0 和 .25、0 和 .5、1 和 0。列出你得到的整数:1 1 0 0 0 1。现在是基数为 2 的数字您想要的是一个句点后跟这些数字:.110001。因此,基数 2 中的 12.25,根据您讲师的定义进行归一化,是 1×.110001×24。
找到 x 的正确值的规则可能是这样的:从指数 0 开始。如果 x 大于 1,则将其除以底数,然后在指数上加 1。如果 x 小于 1/base,则将其乘以底数并从指数中减去 1。重复此操作,直到 x 介于 1/base 和 1 之间(包括 1/base 但不包括 1,因此如果 x 等于 1/base,则停止)。
对于 12.25 和十进制:从指数 0 开始。将 12.25 除以 10(得到 1.225)并将指数增加到 1。再次除以 (.1225) 并将指数增加到 2。现在我们停止,因为 .1225 介于 1/10 和1.
对于 12.25 和基数 16:从指数 0 开始。将 12.25 除以 16(得到 .765625)并将指数增加到 1。现在停止,因为 .765625 介于 1/16 和 1 之间。
将 .765625 转换为基数 16:将 .765625 乘以 16 得到整数 12(数字 C)和分数 0.25。 0.25 乘以 16 得到整数 4 和分数 0。分数是 0,所以停止。基数为 16 的数字是 .C4,所以整个形式是 1×.C4×21。
有时,将使用“标准化”的其他定义。通常,我们不是将 x 调整到 1/base 和 1 之间,而是将 x 调整到 1 和 b 之间。
关于floating-point - 计算基数为 2、10 和 16 的浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10244044/