16 位浮点数范围和位数

16-bit floating point range and median

我们有一个适合 16 位的浮点代码,其中 1 位用于符号,4 位用于指数,11 位用于有效。我已经阅读了有关浮点数的内容,并且能够找到归一化指数的范围。我认为这将是 1-bias 和 2^(exp-1) - 1,这会导致 [-6,7] 的范围。

我也一直在尝试找到非规范化正值的范围,代码的中值,正规范化值的中值和正值的中值。

我知道要找到最大正归一化值,我需要计算 0 0000 11111111111(最小)和 0 1110 11111111111(最大)。另外,可以编码多少个不同的值?会是2^16吗?

以下仅当您使用类似 ieee-754 的格式时才有意义,这是合理的,因为您似乎遵循该标准来确定上面的最大数字。我已经从字面上理解了你的隐含问题,希望它有用。

非规范化值的范围

0 0000 00000000000 - 0 0000 11111111111

那是0 to 2^-6 * (1-2^-11)

代码中值

中位数只是所有代码的 'middle'。如果你按代码订购所有东西,这些是两个核心的:

0 1111 11111111111
1 0000 00000000000

介于 NaN 和负零之间!如果你想在零和 NaN 之间插入一个值,你的答案将是 NaN。如果你只是按值排序,那么说 0.0 是浮点数正常顺序的中心代码可能更有意义。

正归一化值的中位数

我们需要找到范围的中间值:

0 0001 00000000000
0 1110 11111111111

加上未计算的代码,将代码除以二。介于两者之间。

0 0111 11111111111
0 1000 00000000000

大约是 2.0。

正值的中位数。

类似的逻辑,得到: 0 0111 01111111111

大约是 1.5。 (有意义的是,包括一个额外的尾数位范围,将您的中位数微调半个尾数范围)

可以编码的不同值的数量

如果你区分不同的 NaN 和 -0,那就是 2^16。

如果排除 NaN,则必须为每个符号减去所有 NaN 表示代码(所有非零尾数):2^16-2*(2^11-1)。