के लिए 64-बिट विशिष्ट विभाजन एल्गोरिदम पर एक तेज़ 96-बिट की आवश्यकता है, मैं वर्तमान में 32.32 निश्चित-बिंदु गणित लाइब्रेरी लिख रहा हूं। मैं जोड़ना, घटाव और गुणात्मक कार्य सही ढंग से करने में सफल रहा, लेकिन मैं विभाजन में काफी अटक गया हूं।मुझे एक निश्चित-बिंदु गणित पुस्तकालय
उन लोगों के लिए थोड़ा अनुस्मारक जो याद नहीं कर सकते: 32.32 फिक्स्ड-पॉइंट नंबर एक संख्या है जिसमें 32 बिट पूर्णांक भाग और आंशिक भाग के 32 बिट होते हैं।
सबसे अच्छा एल्गोरिदम मैं 96-बिट पूर्णांक विभाजन की आवश्यकता के साथ आया, जो कि कुछ कंपाइलर्स आमतौर पर अंतर्निहित नहीं होते हैं।
वैसे भी, यहाँ यह जाता है:
G = 2^32
notation: x is the 64-bit fixed-point number, x1 is its low nibble and x2 is its high
G*(a/b) = ((a1 + a2*G)/(b1 + b2*G))*G // Decompose this
G*(a/b) = (a1*G)/(b1*G + b2) + (a2*G*G)/(b1*G + b2)
आप देख सकते हैं, (a2*G*G)
नियमित 64-बिट पूर्णांक से बड़े होने की गारंटी है। uint128_t की वास्तव में मेरे संकलक द्वारा समर्थित थे, तो मैं बस निम्नलिखित करना होगा:
((uint128_t)x << 32)/y)
खैर वे नहीं हैं और मैं एक समाधान की जरूरत है। आपके सहयोग के लिए धन्यवाद।
"टाइपपीफ स्ट्रक्चर {हस्ताक्षरित लंबा यू [4];} __attribute ((गठबंधन (16))) __uint128_t;" जीसीसी से चोरी हो गई है, और शायद कहीं और काम नहीं करेगी (और शायद जीसीसी के साथ जरूरी नहीं है। हाँ, मुझे संदेह है कि इससे मदद मिलती है। – Brian