【问题标题】:Integer representation to float representation整数表示到浮点表示
【发布时间】:2012-02-18 05:32:09
【问题描述】:

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


我对此有一些想法,但到目前为止这些都不起作用。 (使用 C)

  1. 我正在考虑移动整数,但后来我没有 在其上构造新的浮点表示。

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

【问题讨论】:

  • “将整数转换为二进制”是什么意思?它已经是二进制的...

标签: c algorithm floating-point ieee-754


【解决方案1】:

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 中的位构造你的浮点数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 2023-04-11
    • 1970-01-01
    • 2012-04-29
    • 2015-08-10
    • 2016-05-17
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多