我需要一些可以处理大整数(128位)的除法算法。 我已经问过如何通过位移操作符来完成它。不过,我目前的实现似乎要求一个更好的办法大数的分区
基本上,我店数为两个long 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
改造它。然而,这是越野车。
(注意,地板是A/24
并且mod
是A % 24
,正常分裂被存储在long double
,整数被存储在long long unsigned int
。
由于24
等于二进制11000
,所述第二被加数不应该在第四个加数的范围内改变一些东西,因为它向左移动64位
因此,如果A * 2^64 + B
可以被24整除,而B不是,那么它很容易发现它的错误,因为它返回一些非整数号码
我的实现中有什么错误?
位移法的问题是什么? – 2009-11-27 13:15:54
当你已经能够划分int64的 – Etan 2009-11-27 15:12:37