目前正在查看一些材料,我看到 IEEE 754 浮点格式中写着:
x = (-1)^S × (1 + 分数) × 2^(指数 - 偏差)
我正在查看一些示例,看到它表示数字 0.75,当将其转换为单精度浮点编码时,指数将为 -1 + Bias,或 -1 + 0111 1111。这很奇怪,因为指数 = power +偏见。
澄清一下,x = (-1)^S × (1 + 分数) × 2^(指数 - 偏差) 是指数偏差还是指数-偏差?
为什么在这个视频中 https://youtu.be/K1XgRO4pvFs?t=352 是 2 ^ (e - 127),其中 127 被减去?
如果我们区分数学值和值的编码,这会更容易理解。
考虑一些我们放入普通二进制浮点形式的数字:(−1)s•f•2e。这里 s 表示符号,f 是小数部分(称为尾数),e 是指数。 s 根据数字是正数还是负数为 0 或 1,1 ≤ f < 2, and e 为整数。对于这个答案,我假设 f 适合 24 位,因此以二进制 32 格式表示它时不需要舍入,也称为“单精度”。
我们将把这个数字编码为 32 位的字符串:1 位称为 S,8 位称为 E,23 位称为 F。虽然这些是位串,但我们还将用二进制数字来标识它们,并将它们称为具有这些数字的值。因此,就我们的目的而言,位串 01111111 是数字 127。
标志简单;我们只需设置 S = s。
对于指数,如果 e 处于格式的正常指数范围 [−126, 127] 内,我们使用 E = e + 127 对 E 进行编码。(如果 e 为超出此范围的内容不在此答案中涵盖。)
对于分数,我们设置 F = (f−1)•223。这相当于将 f 写为 1.bbbbbbbbbbbbbbbbbbbbbbbb 形式的 24 位二进制数字,其中每个 b 是一个位,然后将 F 设置为那些尾随的 23 位。
连接这些位串 S、E 和 F 得到 32 位,以二进制 32 格式编码数字 (−1)s•f•2e。
上面使用的数字,[−126, 127]表示指数范围,127表示偏差,是binary32类型的固定参数。它们不会根据正在编码的数字而改变。
再次强调,为了保持清晰,请记住 f 和 e 是数学格式中数字的分数部分和指数。 f 是 分数部分,e 是 指数。
F 不是分数部分(或有效数),E 不是指数。 F是分数部分的编码,E是指数的编码。它们是告诉您分数和指数的数字或位字符串。它们不是实际的分数或指数。 (此外,F本身是不完整的。要了解一般情况下的f,您必须知道E,这样您才能确定该数字是正常还是次正常。)