我正在做我的硬件但卡住了。我需要计算出数字 2 * 2^{-151} 的单精度表示。
我认为这是一个次正规/非正规化数字,因此我需要将指数部分设置为全零;对于尾数部分,由于我只有 23 位,所以我可以设置的最小位数是 2^{-23}。因此我可以表示的最小非规范化数是
2^{-23} * 2^{-126} = 2^{-149}。
我如何表示 2 * 2^{-151} ?在这种情况下我会得到 0 吗?我们可以用C/C++来验证这一点吗?
我正在做我的硬件但卡住了。我需要计算出数字 2 * 2^{-151} 的单精度表示。
我认为这是一个次正规/非正规化数字,因此我需要将指数部分设置为全零;对于尾数部分,由于我只有 23 位,所以我可以设置的最小位数是 2^{-23}。因此我可以表示的最小非规范化数是
2^{-23} * 2^{-126} = 2^{-149}。
我如何表示 2 * 2^{-151} ?在这种情况下我会得到 0 吗?我们可以用C/C++来验证这一点吗?
IEEE-754 二进制 32 格式(“单精度”二进制浮点)无法表示数字 2 −151。
如果执行操作以将 2 −151从另一种格式(例如从源代码中的文字或从binary64 [“双精度”]格式)转换为binary32,则根据舍入规则的选择对结果进行舍入。一般默认规则是舍入到最近的联系到偶数。最接近 2 −151的二进制 32 表示的两个数字是 0 和 2 −149。0 最接近,所以就是结果。采用“向上”舍入规则,向 +∞ 方向舍入,结果将为 2 −149。