Floating point 在模拟IEEE-754单精度乘法过程中添加隐式位

Floating point 在模拟IEEE-754单精度乘法过程中添加隐式位,floating-point,precision,ieee-754,Floating Point,Precision,Ieee 754,我试图学习单精度IEEE-754乘法是如何工作的。特别是,我正在研究实现- 在执行有效位乘法之前,隐式位分别添加到每个乘法器的有效位。守则的有关部分如下: sigA = (sigA | 0x00800000)<<7; sigB = (sigB | 0x00800000)<<8; sigA=(sigA | 0x00800000)移位是精心设计的,以便使用有符号整数算法在63位上拟合乘积 sigA位于24位,这意味着sigA的边界是sigA=2^46。瞧,它至少跨越47位

我试图学习单精度IEEE-754乘法是如何工作的。特别是,我正在研究实现-

在执行有效位乘法之前,隐式位分别添加到每个乘法器的有效位。守则的有关部分如下:

sigA = (sigA | 0x00800000)<<7;
sigB = (sigB | 0x00800000)<<8;

sigA=(sigA | 0x00800000)移位是精心设计的,以便使用有符号整数算法在63位上拟合乘积

sigA位于24位,这意味着sigA的边界是
sigA<2^24

与sigB相同:
sigB<2^24

因此,产品
sigA*sigB<2^48
,或者换句话说,您可以保证它适合48位
(最多是
(2^24-1)^2=2^48-2^25+1

因此,如果移位15位(8+7),则可以保证结果适合63位

由于隐含的原因,您还有
sigA>=2^23
sigB>=2^23
,因此
sigA*sigB>=2^46
。瞧,它至少跨越47位

因此,通过移位15位,您可以确定结果适合63位或62位。无论您移动每个有效位多少次,15+0或1+14都同样有效。但由于平衡良好的8+7,每一个仍然适合32位,这是聪明的

在下一行中,您会看到产品始终调整为与位置63处的最高有效位相匹配(基于1):

if(sigZ<0x40000000){
--expZ;
西格兹
if ( sigZ < 0x40000000 ) {
        --expZ;
        sigZ <<= 1;
}