【发布时间】:2014-09-23 06:56:03
【问题描述】:
我正在尝试找出对浮点值使用标准化表示的一些细节。
据我了解,IEEE-754 表示的工作方式如下:
1.{significand} * 2^{exponent}
对于单精度,有效数为 24 位,指数为 8 位。
我试图将其分解为基本上是指数支持的每个数字范围内可用的“插槽”数量,例如:
[Exponent=0] 0.0 - 1.0 : 2^23 values
[Exponent=1] 1.0 - 2.0 : 2^23 values
[Exponent=2] 2.0 - 4.0 : 2^23 values
[Exponent=3] 4.0 - 8.0 : 2^23 values
我试图证明,在使用量化时,如果我感兴趣的范围限制在 0.0 - 1.0,我可以使用 2^24 位来表示这个数字,并且在去除指数,这可以很容易地转换为完整的浮点表示。此外,为了清楚地说明使用浮点时更接近零的精度比更远的精度更高,因为感觉这可能非常直观易懂。
我不太清楚的一个领域是支持的指数是 -127 到 126,负数部分是如何工作的? 1.5 * 2^-1 明显与 0.0 - 1.0 范围重叠。
最后,我知道有效数字中的一个位用于符号,但是隐藏位代表什么,这会影响每个范围内可用的“插槽”数量吗?
【问题讨论】:
-
请注意,尾数有 24 位,但由于最高位始终为规范化数字设置,并且始终为非规范化数字清除,因此不存储。存储 23 位尾数。
-
要回答您问题的“使用 2^24 位来表示这个数字并且不会损失精度”部分,有很多介于 0 和 0.5 之间的浮点数不能以您似乎正在考虑的 24 位定点格式无损失地表示。
-
您的指数范围有点混乱:正常数字的(无偏)指数介于 -126 和 127 之间(对应于有偏指数的 8 位)字段范围在 1 到 254 之间)。指数字段 0 保留给零和次正规,而指数字段 255 保留给无穷大和 NaN。
-
0.0 和 1.0 之间没有 2^23 个值:0.5 和 1.0 之间有 2^23,0.25 和 0.5 之间有 2^23,0.125 和 0.25 之间有 2^23,依此类推,依此类推,直到你得到非规范化的数字。
标签: floating-point ieee-754 floating-point-precision floating-point-conversion