从不带FPO的定点整数重建IEEE754浮点二进制数

问题描述 投票:0回答:1

我有一个使用定点数的程序,因为我使用的CPU不支持IEEE754浮点数。

我一直都做得很好,首先通过找到指数将标准IEEE754s转换为固定点,然后通过手动访问内存中所述IEE754浮点数的位数来移位数字等。转换后,我可以进行定点计算。

但是,是否可以将固定点(例如Q15.16整数)重新构造为不带FPO的IEE754浮点,以便具有IEEE754 / FPO支持的CPU能够将其读取为其本机浮点类型?是否有任何代码或示例说明了CPU的FPO单元是如何在原始字节操作中实际进行此转换的,还是仅仅是一些无法在软件中完成的黑魔法?显然,我不是在寻找超精确转换。

我到目前为止看到的所有答案都使用FPO。例如,首先计算已经需要FPO的2 ^(-num_fraction_bits_in_fixed),然后将不动点缩放到该缩放因子。

floating-point ieee-754 fixed-point
1个回答
1
投票

在不失一般性的情况下,请考虑无符号定点数x,假设(此处不失一般性)定点格式中的每个数字都是浮点格式的规范化float(由其表示):

1)找到前导零n的数量(可能会有特殊的CPU指令来快速执行此操作,并且没有(软件)循环)。

2)将数字左移(y = x << n+1)(以产生标准化的浮点尾数),然后右移(m = y >> (signbit+exponentbits)),这是浮点数的尾数。

3)取n,减去定点格式的非小数位数,再加上浮点格式的指数偏差。将有偏指数移到定点结果的指数位。

4)如果原始数字不是未签名的,则在数字为负的情况下在结果中设置符号位。


a)如果定点数字带有符号v,则转换为不带符号的u,并单独保留符号s(您可以将其直接复制到浮点数字的符号位)。上面算法的无符号输入将是x = v < 0 ? -u : u

b)exponentbits取决于浮点数格式。对于ieee754 32位float,它是8

c)定点格式通常用n位的整数表示数字,该整数(概念上)除以2^m的常数。非小数位(如果存在)是n - mn > m

d)exponent bias再次由浮点格式描述。对于ieee754 32位float,偏差为127

© www.soinside.com 2019 - 2024. All rights reserved.