是否有一种算法可以通过仅使用整数运算将其整数表示中的32位整数转换为IEEE 754浮点表示?
我对此有几点想法,但到目前为止这些都没有。 (使用C)
我在考虑改变整数,但后来却没有 在那上构造新的浮动表示。
我想我可以将整数转换为二进制但它具有相同的结构 第一种方法存在问题。
答案 0 :(得分:2)
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
中的位构造浮点数