浮点表示的整数表示

时间:2012-02-18 05:32:10

标签: c algorithm floating-point ieee-754

是否有一种算法可以通过仅使用整数运算将其整数表示中的32位整数转换为IEEE 754浮点表示?


我对此有几点想法,但到目前为止这些都没有。 (使用C)

  1. 我在考虑改变整数,但后来却没有 在那上构造新的浮动表示。

  2. 我想我可以将整数转换为二进制但它具有相同的结构     第一种方法存在问题。

1 个答案:

答案 0 :(得分:2)

excellent resource on float

Address   +3        +2      +1      +0
Format SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
  

S表示符号位,其中1为负,0为正。

     

E是二进制补码指数,偏移量为127。

     

M是23位标准化尾数。最高位始终为1   因此,不存储

然后查看here获取两个补码


我将使用num作为位数组,我知道这不是标准的C数组范围访问,但是你明白了
因此,对于基本算法,我们首先填写S。

bit S = 0;
if (num[0] ==1) {
  S = 1;
  num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1
}

现在我们设置了S,我们的数字的其余部分有一个标量值。

然后我们可以通过找到1的第一个索引将我们的数字定位到尾数中。这也可以让我们找到指数。请注意,指数始终为正数,因为我们不能得到小数int值。 (另外,在特殊情况下检查值是否为0,以避免在此处出现无限循环,或者只是适当地修改循环,我很懒惰)

int pos = 1;
signed byte E = 32;
bit[23] M;
while(num[pos] == 0) {
  --E;
  ++pos;
}
int finalPos = min(32, pos+23); //don't get too many bits
M = num[pos+1..finalPos]; //set the mantissa bits

然后使用S,E,M

中的位构造浮点数