在C中双重转换值以进行64位乘法

时间:2017-10-30 14:15:03

标签: c99

我试图在不使用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;

0 个答案:

没有答案