我需要一些可以處理大整數(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