64位乘32位除法

时间:2010-08-12 21:15:57

标签: c 64-bit math division

我正在寻找一种快速执行以下分区的方法:

  • Dividend是一个带符号的64位整数。
  • 除数是带符号的32位整数。
  • 商数应该是带符号的64位整数,余数是不必要的。
  • 红利的低dword为零。

我只使用32位数据类型,因为编译器不支持64位数据类型,也没有汇编。在速度方面,准确性可能有所妥协。

关于这个的任何指针?

1 个答案:

答案 0 :(得分:2)

64/32除法直接由i386和其他机器支持,只要被除数的高位字小于除数(即被除数在32x32-> 64的范围内乘除数除数)。如果您的编译器对64位类型的支持最少,它可能能够识别这种情况并利用它。

假设您已经检查了生成的asm并发现它没有利用这一点,或者如果您知道您的cpu没有这样的除法指令,那么您只需要像在等级中学到的那样进行长划分学校..除了它是基地-4294967296而不是基地-10。

您可以尝试将源读取到libgcc,因为它包含64/64分区的代码,用于没有本机支持的计算机。

编辑:实际上,由于您没有64/32除法运算,您可能需要使用base-65536。这是因为天真的长除法需要在每一步将“2位数”除以“1位”数。当然,现在你被迫做了更多的步骤..