2011-06-16 15 views
5

मैं अपने मास्टर्स के लिए एक प्री-रेक के रूप में एक कंप्यूटर सिस्टम क्लास ले रहा हूं और व्यावहारिक उपयोग देखने के लिए मुझे आकर्षक और कठिन कुछ मिला है और यह "घटाना झुकाव" है और तथ्य यह है कि वहां होने की आवश्यकता नहीं है एक घटाव निर्देश।क्या असली दुनिया में कभी भी "फटे हुए घटाव" का उपयोग किया जाता है?

कुछ की तरह:

एक्स - y

के रूप में लिखा जा सकता है:

x + (~ y + 1)

अब, यह सब अच्छी तरह से और अच्छा है, लेकिन यह की तरह लगता है यह एक साधारण घटाव के लिए अत्यधिक जटिल है, खासकर जब आप आसानी से "x-y" डाल सकते हैं। क्या ऐसी परिस्थितियां हैं जहां ऐसा करना आवश्यक होगा, या यह ऐसा कुछ है जो किया जा सकता है लेकिन नहीं।

+1

2 के पूरक गणित की तरह दिखता है। यह आमतौर पर इस तरह हार्डवेयर में लागू किया जाता है। –

+1

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि इसका उपयोग कुछ बाइनरी खोज कार्यान्वयन में किया जाता है। यह 2^31 सीमा को हटा देता है। आप "बाइनरी खोज टूटा" के लिए Google पर जा सकते हैं और उस उदाहरण को ढूंढ सकते हैं। यह एक पृष्ठ था जिसमें मध्य = (हाय + लो)/2 – Behrooz

+2

@Behrooz कंप्यूटिंग के लिए 50 कुछ तरीके थे: समाधान है 'कम + (उच्च-निम्न)/2' करें। –

उत्तर

2

दो पूरक पूरक कार्यान्वयन हार्डवेयर में किया जाता है, इसलिए आपको इन्हें बिल्टिन डेटाटाइप के लिए लागू करने की आवश्यकता नहीं है।

यदि आप एन-बिट पूर्णांक अंकगणितीय लाइब्रेरी बना रहे हैं, तो आपको पूर्णांक अतिरिक्त, घटाव, गुणा और विभाजन आदि संचालन का अनुकरण करने की आवश्यकता है, इस मामले में ऐसी तकनीक को एन-बिट लंबाई संख्या जोड़ने के लिए लागू किया जा सकता है , लेकिन ऐसा करने के लिए लेयर फ्लैग का उपयोग करना मेरी राय में एक बेहतर कार्यान्वयन है।

+0

आपके समय के स्पष्टीकरण के लिए धन्यवाद कि यह उपयोग में आ सकता है। – Jetti

+0

असल में मैंने एक बार नमूना एन बिट हस्ताक्षरित पूर्णांक अंकगणितीय पुस्तकालय में इस विधि को लागू किया है, जो कार्यान्वित करने के लिए आसान है। – phoxis

+0

@phoxis - दिलचस्प! क्या आप कृपया मुझे बता सकते हैं कि उस लाइब्रेरी का क्या उपयोग होगा? – Jetti

0

मुझे ऐसा करने का बिंदु नहीं दिखाई दे रहा था। यह अब और कुशल नहीं है। वास्तव में यदि यह संकलक द्वारा अनुकूलित नहीं किया गया है तो यह अधिक ऑपकोड उत्पन्न करता है।

6

यह अक्सर हार्डवेयर स्तर (यानी एएलयू के अंदर) पर किया जाता है।

सॉफ़्टवेयर स्तर पर, यह आमतौर पर बेकार है, क्योंकि यह सीधे सीधा प्रवाह से अधिक कुशल नहीं हो सकता है (जब तक कि आपके पास वास्तव में विचित्र कंपाइलर/प्लेटफ़ॉर्म संयोजन न हो)।

+3

हालांकि कोड में इसे लिखने का कोई कारण नहीं होगा। –

+0

कंपाइलर्स अनुमान लगाते हैं कि यह एक अतिरिक्त निर्देश है लेकिन सीपीयू यह 'x + (~ y + 1) 'करेगा। हार्डवेयर में कार्यान्वित किया गया है। –

+0

@ हामेट: हाँ, यह मूल रूप से मेरा जवाब पहले से ही कहता है। –

2

ऐसा नहीं है कि यह है कि कैसे घटाव आंतरिक रूप से किया जाता है स्पष्ट होना चाहिए, इसलिए मुझे यकीन है कि आप "असली दुनिया में इस्तेमाल किया जा रहा" क्या मतलब है नहीं कर रहा हूँ। यही कारण है कि दो के पूरक को पहले स्थान पर चुना गया था, क्योंकि घटाव नकारात्मक वृद्धि को बह रहा है।

+0

मेरा मतलब यह है कि क्या मेरे लिए कोड लिखने के लिए कोई रास्ता नहीं है, बस सादे "-" का उपयोग करने के बजाय? – Jetti

+0

@ जेटी, नहीं। हालांकि, आपका प्रश्न * वास्तव में * वास्तविक दुनिया में कभी भी इस्तेमाल किया गया था? ", जिसका उत्तर एक शानदार हां है। – Blindy

1

मुझे आपके सी कोड में ऐसा करने का कोई कारण नहीं दिखता है। सॉफ़्टवेयर में ऐसा करना शून्य ऑपरेटर का उपयोग करके घटाना से तेज़ नहीं है - और यह बहुत अधिक अस्पष्ट है।

हालांकि, प्रोसेसर घटाव निष्पादित करने का तरीका है। मुझे यकीन है कि आपने यह कोड देखा है कि हार्डवेयर क्या करता है, क्योंकि यह देखना आसान है कि x + (~y + 1) एक तर्क सर्किट बन जाएगा।

तो ... नहीं, तुम असली दुनिया में इस कोड का उपयोग नहीं होगा, लेकिन यह आपरेशन अपने प्रोसेसर में समय की एक बहुत मार डाला जाता है।

0

सीपीयू के अरबों ट्रांजिस्टर के साथ खेलने से पहले इस तरह की सामग्री अधिक आम थी। एक विशेष सीपीयू एक विशिष्ट घटाना ओपोड लागू नहीं कर सकता है, और इसलिए इसे संकलित करने वाला एक कंपाइलर (या असेंबली प्रोग्राम) उस चाल को जानना होगा।

ये कुशलताएं आपको CPU के आंतरिक कार्यान्वयन को समझने में भी मदद कर सकती हैं।उदाहरण के लिए, सीपीयू के डिवीजन ऑपरेशंस को कभी-कभी विभाजक के पारस्परिक रूप से प्राप्त करके और लाभांश द्वारा गुणा करके पूरा किया जाता है; पारस्परिक एकमात्र वास्तविक "विभाजन" किया जा रहा है।

+0

सामान्यतः यह नहीं है कि विभाजन कैसे कार्यान्वित किए जाते हैं! –

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