我需要一些可以处理大整数(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 不能,则很容易表明它存在错误,因为它返回了一些非整数。
我的实施中有什么错误?