64位机器上的无符号128位除法

roo*_*kie 5 integer-division

我有一个128位数字存储为2个64位数字("Hi"和"Lo").我只需要将它除以32位数.我怎么能这样做,使用CPU的本机64位操作?

(请注意,我不需要任意精度库.只需要知道如何使用本机操作进行这种简单的划分.谢谢).

F.D*_*tel 3

如果您使用架构可以处理的最大可能的本机表示(64 位)来存储值(128 位),那么您将在处理除法的中间结果时遇到问题(正如您已经发现的:))。

但您始终可以使用更小的表示形式。那么四个 32 位数字呢?这样您就可以使用本机 64 位操作而不会出现溢出问题。

可以在这里找到一个简单的实现(在 Delphi 中)。