我正在尝试在微控制器中实现浮点运算,到目前为止我已经取得了很大的成功。
问题在于我在计算机中进行乘法运算的方式,它工作正常:
unsigned long long gig,mm1,mm2;
unsigned long m,m1,m2;
mm1 = f1.float_parts.mantissa;
mm2 = f2.float_parts.mantissa;
m1 = f1.float_parts.mantissa;
m2 = f2.float_parts.mantissa;
gig = mm1*mm2; //this works fine I get all the bits I need since they are all long long, but won't work in the mcu
gig = m1*m2//this does not work, to be precise it gives only the 32 least significant bits , but works on the mcu
所以你可以看到我的问题是,__muldi3
如果我在gig = mm1*mm2
那里尝试,微控制器会抛出一个未定义的引用。
如果我尝试使用较小的数据类型,它只会保留最低有效位,这是我不希望的。我需要产品的 23 msb 位。
有没有人对我如何做到这一点有任何想法?