मुझे कुछ डिवीजन एल्गोरिदम की आवश्यकता है जो बड़े पूर्णांक (128-बिट) को संभाल सकता है। मैंने पहले से ही पूछा है कि बिट स्थानांतरण ऑपरेटरों के माध्यम से इसे कैसे किया जाए। हालांकि, मेरे वर्तमान कार्यान्वयन के लिए एक बेहतर दृष्टिकोणबड़ी संख्याओं का डिवीजन
असल में, मैं प्रारूप
B < 2^64
साथ A * 2^64 + B
में दो long long unsigned int
के रूप में संख्या की दुकान के लिए पूछ रहा है।
यह संख्या 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 तक विभाजित है, और बी नहीं है, तो यह आसानी से दिखाता है कि यह कुछ गैर-अभिन्न अंग लौटाता है संख्या
मेरे कार्यान्वयन में त्रुटि क्या है?
बिट स्थानांतरण दृष्टिकोण के साथ समस्या क्या थी? –
ऐसा लगता है कि जब आप पहले से ही int64 के – Etan