कई प्रोग्रामिंग भाषाओं में मॉड (%) एक मौलिक गणितीय ऑपरेटर क्यों है?


17

क्या कोई कारण है, ऐतिहासिक या अन्यथा, क्यों मापांक ऑपरेटर कई भाषाओं की तरह प्रतीत होने वाले मानक ऑपरेटरों के एक छोटे समूह का हिस्सा है? ( +, -, *, /और %, जावा और सी के लिए, **रूबी और पायथन में)।

एक "मौलिक" के रूप में मॉड को शामिल करना अजीब लगता है (इसे खटखटाने के लिए नहीं, मैं इसे बहुत उपयोग करता हूं, लेकिन मैं घातांक, निरपेक्ष मूल्य, फर्श / छत या अन्य का उपयोग करता हूं - वे बस के रूप में उपयोगी और आवश्यक लगते हैं)। क्या यह किसी पुराने विनिर्देश में किया गया निर्णय था, जिसमें जावा, सी, रूबी और पायथन सभी का पालन किया गया या वे सभी जिस भाषा से आए हैं, वह है? जहां तक ​​मैं बता सकता हूं कि ज्यादातर लिस्प बोलियों में केवल शामिल हैं +, -, /और *

पहले तो मैंने सोचा कि अगर मॉड बाइनरी स्तर पर लागू करना आसान था (क्या इससे भी फर्क पड़ेगा कि "मौलिक" ऑपरेटर क्या होना चाहिए और क्या नहीं?) लेकिन ऐसा नहीं लगता है। क्या मुझे लगता है कि यह प्रोग्रामिंग में आमतौर पर बहुत अधिक उपयोग किया जाता है?

जवाबों:


20

मुझे यकीन है कि यह आम है क्योंकि कई CPU आर्किटेक्चर modulusपूर्णांक विभाजन निर्देश के दूसरे आउटपुट के रूप में लागू होते हैं ।

मुझे यह याद नहीं है कि यह 1970 के दशक के CPU (6800, 8080, Z80, 1604, आदि) में मौजूद है, लेकिन 1980 के दशक तक, Intel 8086 और 8088, साथ ही मोटोरोला 6809 के पास भी था।

PDP-11 निर्देश वास्तुकला में DIVएक भागफल और शुरुआत (1970) से एक शेष का निर्माण किया गया, हालांकि MUL और DIV निर्देश प्रारंभिक डिजाइनों में मौजूद नहीं थे, लेकिन पारदर्शी रूप से "निर्देश लागू नहीं किया गया" और इसे एक के साथ लागू किया जा सकता है हैंडलर जिसने थोड़ा ट्विडलिंग किया। संभवतः PDP-11 सुविधा ने सी भाषा के पहले संस्करण को %सुविधा प्रदान करने के लिए प्रोत्साहित किया । (कभी ध्यान दें कि एक प्रतिशत संकेत में एक स्लैश कैसे है? यह एक विभाजन से संबंधित ऑपरेटर के लिए एक चतुर विकल्प बनाता है।)

Cअकेले मापांक की उपस्थिति शायद सभी आधुनिक भाषाओं में इसकी उपस्थिति की व्याख्या कर सकती है। Cवंशजों का एक बहुत बड़ा परिवार है और अन्यथा काफी प्रभावशाली था।


3
1970 के दशक की शुरुआत के बाद से प्रत्येक गैर-एलआईएसपी भाषा पर +1 सी का प्रभाव बहुत अधिक नहीं हो सकता है।
रॉस पैटरसन

8

कई प्रोग्रामिंग भाषाओं में एक "शेष" ऑपरेटर होता है जिसका उपयोग मॉडुलस ऑपरेटर के रूप में किया जा सकता है जब दोनों ऑपरेंड सकारात्मक होते हैं; कहा ऑपरेटर को अक्सर "मापांक" ऑपरेटर कहा जाता है, क्योंकि यह इसका प्राथमिक उपयोग है। आम तौर पर भाषाओं में ऐसा एक ऑपरेटर होता है क्योंकि कई हार्डवेयर प्लेटफ़ॉर्म का विभाजन हार्डवेयर स्वचालित रूप से एक विभाजन का प्रदर्शन करते समय शेष की आपूर्ति करता है, और किसी भी अन्य माध्यम से शेष या मापांक की गणना करना अधिक कठिन होता है।

मुझे हस्ताक्षरित विभाजन के लिए हार्डवेयर समर्थन का इतिहास नहीं पता है; कई प्रोसेसरों के पास साल भर के लिए हार्डवेयर उपलब्ध है जो स्वचालित रूप से हस्ताक्षरित डिवीजन को नियम के अधीन कर सकता है कि यदि / b पैदावार (q, r), तो -a / b या / -b उपज होगी (-q, -r), लेकिन मैं उन मामलों के उपयोग के बारे में सुनिश्चित नहीं हूं जहां उस नियम का उपयोग करने वाला विभाजन विशेष रूप से सहायक है। लगभग हर मामले में जहां मैंने पूर्णांक विभाजन या नकारात्मक मूल्यों पर "मापांक" संचालन का उपयोग किया है, मुझे विभाजन पर गोल-नेगेटिव-इनफिनिटी और एक सच्चा मापांक ऑपरेशन (जैसे कि + a + b) / b चाहिए होता है। हमेशा बराबर (a / b) +1 और (a + b)% b हमेशा% b के बराबर होगा।) क्योंकि ऑपरेटर उस तरह से काम नहीं करते हैं, इसलिए लाभांश के चिन्ह का परीक्षण करना आवश्यक है और जब यह अलग कोड का उपयोग करें ' नकारात्मक - अनिवार्य रूप से किसी भी लाभ को पहले स्थान पर हस्ताक्षरित विभाजन निर्देश होने से नकारना। मैं इस बात के लिए उत्सुक हूं कि हार्डवेयर में हस्ताक्षरित-विभाजन सहायता वास्तव में किन उद्देश्यों के लिए उपयोगी है।

मूल प्रश्न पर लौटते हुए, मापांक ऑपरेटर अक्सर उन स्थितियों में उपयोगी होता है जहां कुछ चीजें आवधिक आधार पर होती हैं, या तो अंतरिक्ष में (जैसे ग्राफिकल निर्देशांक) या समय में। उदाहरण के लिए, यदि कोई प्रत्येक घटना को हर 15 सेकंड में करना चाहता है, तो अगली घटना तक का समय 15 होगा - ((time_now - time_of_an_occurrence)% 15), यह मानते हुए time_of_an_occurrenceकि इससे अधिक नहीं हैtime_now । अगर time_of_an_occurrenceसे अधिक थी time_now, एक मापांक ऑपरेटर एक ही सूत्र प्रदान की घटाव अतिप्रवाह नहीं था उपयोग करने के लिए जारी रख सकता है, लेकिन शेष ऑपरेटर एक अलग सूत्र की आवश्यकता होगी।


3
उस कारण से, हास्केल के दो ऑपरेटर हैं: remशेष के लिए और modआपके द्वारा वर्णित गुणों के साथ मापांक के लिए।
इंगो

@Complpedseebio: यह विशेष रूप से मज़ेदार है कि इसे अक्सर मापांक ऑपरेटर कहा जाता है क्योंकि यह आमतौर पर मापांक की गणना करने के लिए उपयोग किया जाता है, यहां तक ​​कि जब कोड की आवश्यकता होती है m = number % base; if (m < 0) m+=base;। मुझे नहीं पता कि मैंने कभी भी किसी ऐसे कोड को देखा है q = n/d; if (n%d < 0) q+=1;, जो शेष संचालक के नकारात्मक होने से लाभान्वित होता है, सिवाय शायद , जो किसी भी मामले में अन्य तरीकों से बेहतर लिखा जा सकता है।
सुपरकैट १at

3

मॉडुलस समूह और रिंग सिद्धांत से निकटता से संबंधित है, जो कि बहुत मौलिक गणितीय सिद्धांत हैं।

एक्सप्लेनेरेशन अनुक्रम जोड़, गुणन, एक्सप्रेशन, टेट्रेशन (और यह एक अनंत अनुक्रम है) में सिर्फ तीसरा ऑपरेशन है। यह मुख्य रूप से जटिल संख्याओं के साथ महत्वपूर्ण हो जाता है, जो कंप्यूटर अंकगणित में दुर्लभ हैं। एक विशेष घातांक का स्पष्ट रूप से समर्थन किया जाता है, हालांकि: 2 एन को आमतौर पर लिखा जाता है 1<<n, क्योंकि कंप्यूटर काफी द्विआधारी होते हैं।

फर्श और छत वास्तव में तुलना में दुर्लभ हैं: वे केवल conver से really में परिवर्तित होने पर लागू होते हैं। (पूर्णांक के लिए अस्थायी बिंदु)। इसी तरह, absℤ से a तक मैपिंग के साथ जुड़ा हुआ है


ℤ पूर्णांक हैं (और gers पूर्णांकों का सबसेट है), आपको ℝ से gers तक का मतलब होना चाहिए।
जोनी

@ जोनी: मिश्रित दो उदाहरण, निश्चित।
MSalters

0

क्षमा करें, लेकिन "कॉल माय ब्लफ़" के खेल में इसे बदलने के जोखिम पर, मुझे लगता है कि इस सवाल का असली जवाब काफी सरल है:

मॉड "गैर-दशमलव" मात्राओं और इकाइयों जैसे तिथियों, समय, गज, इंच, औंस इत्यादि में सटीक गणना की अनुमति देता है। दशमलव गणना में, यह प्रोग्रामर के लिए एक संख्यात्मक परिशुद्धता से काम करने की विधि भी प्रदान करता है, जो हार्डवेयर द्वारा प्रदान की जाती है। मशीन का। इसमें बहुत छोटे (उदाहरण के लिए क्वांटम गणना) से बहुत बड़े (उदाहरण के लिए नए अभाज्य संख्याओं की खोज) अनुप्रयोगों की एक बड़ी संख्या है।

यह समझना महत्वपूर्ण है कि हमने इन चीजों को एक कारण के लिए कंप्यूटर कहा है। कभी-कभी हमें सही उत्तर देने के लिए उनकी आवश्यकता होती है!


इस जवाब का कोई मतलब नहीं है ... "mod" का उपयोग करने और विभिन्न इकाइयों का उपयोग करने के बीच क्या संबंध है ???
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.