我试图在不使用FPU的情况下在软件中实现IEEE 754浮点运算。我已经阅读了很多内容,并在此site上找到了64位乘法的解决方案。我理解其中的大部分内容,但我很困惑为什么回答这个问题的人在同一个词中输出值2次,这对我来说没有意义。我觉得它与处理解决方案的高字节和低字节有关,但我不知道双重铸造会如何实现。这是有问题的代码。任何帮助理解为什么这样做会有所帮助。
uint64_t a_lo = (uint32_t)a;
uint64_t a_hi = a >> 32;
uint64_t b_lo = (uint32_t)b;
uint64_t b_hi = b >> 32;
uint64_t a_x_b_hi = a_hi * b_hi;
uint64_t a_x_b_mid = a_hi * b_lo;
uint64_t b_x_a_mid = b_hi * a_lo;
uint64_t a_x_b_lo = a_lo * b_lo;
uint64_t carry_bit = ((uint64_t)(uint32_t)a_x_b_mid +
(uint64_t)(uint32_t)b_x_a_mid +
(a_x_b_lo >> 32) ) >> 32;
uint64_t multhi = a_x_b_hi +
(a_x_b_mid >> 32) + (b_x_a_mid >> 32) +
carry_bit;
return multhi;