2010-07-04 8 views
7

क्या बिटवाइंड ऑपरेशंस का उपयोग करके किसी दिए गए नंबर के वर्ग रूट को खोजने के लिए कोई एल्गोरिदम है?बिटवाई ऑपरेशंस का उपयोग करके किसी दिए गए नंबर की स्क्वायर रूट ढूँढना

+3

शायद आप इसका मतलब है: "क्या कोई एल्गोरिदम है बिटवाई ऑपरेशंस का उपयोग करके दिए गए नंबर के वर्ग रूट को खोजने के लिए "? – Pradyumna

+0

इस पृष्ठ को देखने का प्रयास करें - http://www.azillionmonkeys.com/qed/sqroot.html#implementations –

+0

हाँ मुझे bitwise ऑपरेशंस का उपयोग करके वर्ग रूट खोजने के लिए एल्गोरिदम की आवश्यकता है –

उत्तर

13

this famous piece of code magic है जो उलटा वर्ग रूट कुछ बहुत चालाक बिट twiddling के साथ गणना करता है। जॉन कारकैक - here's a deeper dig को इसकी उत्पत्ति में गलत तरीके से जिम्मेदार ठहराया गया है। हो सकता है कि आप यही पूछ रहे हों?

हालांकि, मैं इसका उपयोग करने का सुझाव नहीं दूंगा। आधुनिक सीपीयू पर यह समर्पित अनुवांशिक निर्देशों को हरा नहीं सकता है। आपका सामान्य सी ++ आंतरिक sqrt() शायद इसे हाथ से हरा देगा।

[संपादित करें]] उद्धृत आलेख इस तरह के तेज़ अनुमानों के लिए एक सामान्य व्युत्पन्न विधि का वर्णन करता है, और स्पष्ट रूप से कहता है कि 'अंतिम पंक्तियों में होमवर्क समस्या के रूप में' sqrt (x) 'के लिए एक समान विधि प्राप्त करें। तो आप अपने तर्क को ट्रैक करने और एसक्यूआरटी (पारस्परिक के बिना) के लिए एक समान विधि तैयार करने में सक्षम होना चाहिए।

1

नहीं ... मुझे लगता है कि यह प्रदर्शन के लिए है? यदि ऐसा है, तो संभव है कि आप संभवतः एक लुकअप टेबल का उपयोग कर रहे हैं। यदि आपके पास पूर्णांक गणित के साथ काम करने का विकल्प है (उदा। संख्याओं के साथ काम करके 10, 100 या 1000 गुना से गुणा करके) आप अनावृत परिशुद्धता को तुरंत फेंकने और लुकअप टेबल में कूदने के लिए बिटवाई रोटेशन का उपयोग कर सकते हैं।

2

Wikipedia के बारे में एक लेख और एक कोड भी है। और another wikipedia article एक एल्गोरिदम दिखाता है (यहां तक ​​कि 2 से अधिक जड़ों के लिए भी) जिसे बाइनरी में आसानी से कार्यान्वित किया जा सकता है (इसलिए, बिट्स पर ऑपरेशन शामिल है)।

यदि आप केवल वास्तविक बिटवाई ऑपरेटरों के लिए चिपकना चाहते हैं, तो आपको एंड्स, ऑर, एक्सर्स, नॉट्स का उपयोग करके + लागू करना होगा ... यदि आप इसे आईईईई के अनुसार फ्लोट पर करना चाहते हैं, तो आपको अधिक काम की आवश्यकता है (पहला विकिपीडिया में कोड का उपयोग "सीधे" पर किया जा सकता है, संभवतः कुछ प्रतिबंध के तहत, और "तदनुसार" एक्सपोनेंट समायोजित करें ... आपको यह पता लगाना होगा कि कैसे, हालांकि!)

संबंधित मुद्दे