जबकि एक signed long long intपकड़ नहीं होगा A*B, उनमें से दो करेंगे। तो A*Bविभिन्न घातांक के पेड़ की शर्तों को विघटित किया जा सकता है, उनमें से कोई भी एक फिटिंग signed long long int।
A1=A>>32;
A0=A & 0xffffffff;
B1=B>>32;
B0=B & 0xffffffff;
AB_0=A0*B0;
AB_1=A0*B1+A1*B0;
AB_2=A1*B1;
उसी के लिए C*D।
सीधे तरीके से फोलो करते हुए, प्रत्येक जोड़ी के लिए सबअरेक्शन किया जा सकता है AB_iऔर CD_iइसी तरह, प्रत्येक के लिए एक अतिरिक्त कैरी बिट (सटीक रूप से 1-बिट पूर्णांक) का उपयोग किया जा सकता है। तो अगर हम कहते हैं कि E = A * BC * D आपको कुछ मिलता है:
E_00=AB_0-CD_0
E_01=(AB_0 > CD_0) == (AB_0 - CD_0 < 0) ? 0 : 1 // carry bit if overflow
E_10=AB_1-CD_1
...
हम के ऊपरी-आधा स्थानांतरित करके जारी रखने E_10के लिए E_20(32 से पारी और जोड़ने के लिए, तो के ऊपरी हिस्से को मिटा E_10)।
अब आप E_11इसे सही चिह्न (नॉन-कैरी भाग से प्राप्त) के साथ जोड़कर कैरी बिट से छुटकारा पा सकते हैं E_20। यदि यह एक अतिप्रवाह को ट्रिगर करता है, तो परिणाम या तो फिट नहीं होगा।
E_10अब पर्याप्त 'स्थान' ऊपरी आधे हिस्से से ले जाने के लिए E_00 (शिफ्ट, ऐड, इरेज़) और कैरी बिट है E_01।
E_10अब फिर से बड़ा हो सकता है, इसलिए हम स्थानांतरण को दोहराते हैं E_20।
इस बिंदु पर, E_20शून्य होना चाहिए, अन्यथा परिणाम फिट नहीं होगा। E_10स्थानांतरण के परिणाम के रूप में ऊपरी आधा खाली है।
अंतिम चरण के निचले आधे हस्तांतरण करने के लिए है E_20में E_10फिर से।
अगर उम्मीद है कि धारण E=A*B+C*Dफिट होगा signed long long int, हम अब है
E_20=0
E_10=0
E_00=E