2010-02-07 12 views
14

मैंने पाइथन और जावा में मॉड्यूलस ऑपरेटर के विभिन्न कार्यान्वयन को देखा है।पायथन बनाम जावा में मॉड्यूलस कार्यान्वयन के बीच अंतर

उदाहरण के लिए

, पायथन में:

>>> print -300 % 800 
>>> 500 

जावा में जबकि:

System.out.println(-300 % 800); 
-300 

यह मैं बंद गार्ड, पकड़ा के बाद से मैं मूल रूप में कुछ सोचा के रूप में मापांक सार्वभौमिक उसी तरह व्याख्या की गई। मैं पाइथन की व्याख्या का प्रशंसक हूं (जो मुझे लगता है कि सी से उधार लिया जाता है), हालांकि मुझे जावा के कार्यान्वयन के पीछे तर्क दिखाई देता है।

आप आमतौर पर कौन सा पसंद करते हैं? क्या अलग-अलग व्याख्याओं के लिए कोई विशिष्ट कारण है? मुझे भाषा युद्ध शुरू करने का कोई इरादा नहीं है, बस उत्सुक है।

+1

यदि मैं विकिपीडिया पेज पढ़ रहा हूं जो एलेक्स सही ढंग से पोस्ट किया गया है, तो पायथन का गणित .fmod जावा के मोड के समान परिणाम देगा। –

उत्तर

6

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

+0

सी 99 लाभांश के संकेत का उपयोग करता है, कम से कम आपके द्वारा लिंक किए गए लेख के मुताबिक, सी 8 9 कार्यान्वयन निर्भर है। – ergosys

+0

आप जावा में '%' का उपयोग ऐसे फ़ंक्शन को लिखने के लिए कर सकते हैं जो पायथन के समान काम करता है; http://stackoverflow.com/a/3417242/320036 – z0r

+0

सी जावा की तरह व्यवहार करता है, पायथन नहीं। – ryancerium

1

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

मुझे नहीं पता कि मॉड्यूलो से नकारात्मक संख्या प्राप्त करने के फायदे क्या हैं।

0

मैं x mod n 0 0 और एन -1 या फर्श (एन/2) -एन और फर्श (एन/2) के बीच संख्या देने के लिए x mod n पसंद करता हूं; इससे किसी के सिर में गणित करना सबसे आसान हो जाता है।

जब तक सबकुछ समकक्ष है, मुझे भाषाओं की बात आने पर वास्तव में परवाह नहीं है - हालांकि किसी को इस सम्मेलन से अवगत होना चाहिए।

संयोग से, जावा काफी अपने मन नहीं बना सकते हैं - नकारात्मक पूर्णांक पर% एक नकारात्मक मूल्य, 0 और n-1 (सम्मिलित) के बीच java.math.BigInteger रिटर्न मूल्यों की mod विधि देता है, और divideAndRemainder विधि फिर से नकारात्मक रिटर्न नकारात्मक पूर्णांक के लिए मूल्य।

3

अब इस प्रयास करें:

>>> print 300 % -800 
-500 

अंतर की वजह यह है कि भाषा डिजाइनरों तय करने के लिए विभाजन के बाद शेष लाभांश या भाजक के हस्ताक्षर होना चाहिए नहीं कर पा रहे। कुछ भाषाएं एक या दूसरे को भी निर्दिष्ट नहीं करती हैं, इसलिए यह कार्यान्वयनकर्ता पर निर्भर है।

भाषाओं की एक सूची है, ऑपरेटर, और Modulo operation विकिपीडिया पृष्ठ पर कौन सा संकेत अपेक्षित है। यह शुरू करने के लिए एक अच्छी जगह है, लेकिन मैं आमतौर पर यह सुनिश्चित करने के लिए कुछ सरल परीक्षण चलाता हूं कि मुझे पता है कि % किसी भी भाषा में इसका उपयोग करने से पहले व्यवहार करने जा रहा है, मैंने पहले इसका परीक्षण नहीं किया है।

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