我正在寻找一种快速执行以下分区的方法:
我只使用32位数据类型,因为编译器不支持64位数据类型,也没有汇编。在速度方面,准确性可能有所妥协。
关于这个的任何指针?
答案 0 :(得分:2)
64/32除法直接由i386和其他机器支持,只要被除数的高位字小于除数(即被除数在32x32-> 64的范围内乘除数除数)。如果您的编译器对64位类型的支持最少,它可能能够识别这种情况并利用它。
假设您已经检查了生成的asm并发现它没有利用这一点,或者如果您知道您的cpu没有这样的除法指令,那么您只需要像在等级中学到的那样进行长划分学校..除了它是基地-4294967296而不是基地-10。
您可以尝试将源读取到libgcc
,因为它包含64/64分区的代码,用于没有本机支持的计算机。
编辑:实际上,由于您没有64/32除法运算,您可能需要使用base-65536。这是因为天真的长除法需要在每一步将“2位数”除以“1位”数。当然,现在你被迫做了更多的步骤..