我需要一些可以处理大整数(128 位)的除法算法。我已经问过如何通过位移运算符来做到这一点。但是,我目前的实现似乎要求更好的方法
基本上,我将数字存储为 2long long unsigned int
的格式
A * 2 ^ 64 + B
与B < 2 ^ 64
.
这个数字可以被 整除24
,我想把它除以24
。
我目前的方法是将其转换为
A * 2 ^ 64 + B A B
-------------- = ---- * 2^64 + ----
24 24 24
A A mod 24 B B mod 24
= floor( ---- ) * 2^64 + ---------- * 2^64 + floor( ---- ) + ----------
24 24.0 24 24.0
但是,这是错误的。
(请注意, floor 是A / 24
并且mod
是A % 24
。正常除法存储在 中long double
,整数存储在long long unsigned int
.
由于24
等于11000
二进制,第二个加数不应该改变第四个加数范围内的任何东西,因为它向左移动了 64 位。
因此,如果A * 2 ^ 64 + B
可以被 24 整除,而 B 不能,则很容易表明它存在错误,因为它返回了一些非整数。
我的实施中有什么错误?