2009-08-28 9 views
14

यह एक शब्दाडंबरपूर्ण सवाल का एक सा की तरह लग सकता है परिभाषित करता है, लेकिन मैं इसे यहाँ दो कारणों से पूछते हैं:क्यों सी ++ के आदर्श के रूप में यूक्लिडियन आदर्श चुकता

  1. यह मुझे कुछ समय लिया क्या सी यह पता लगाने की ++ std :: norm() Matlab/Octave से अलग-अलग कर रहा था, इसलिए अन्य लोग यहां पर ठोकर खा सकते हैं।
  2. मैं यह अजीब क्या आम तौर पर आदर्श (या एल 2-नोर्म, या यूक्लिडियन आदर्श, आदि आदि)
माना जाता है करने के लिए कुछ अलग (हालांकि निकट से संबंधित) होने के रूप में norm() समारोह को परिभाषित करने के लिए

विशेष रूप से C++ मानक लाइब्रेरी norm() को जटिल संख्याओं के लिए मॉड्यूलस (या पूर्ण मान) का वर्ग होने के लिए परिभाषित करता है, जहां मॉड्यूलस sqrt (a^2 + b^2) होता है जब जटिल संख्या फॉर्म में होती है I * ख।

यह मानक की मेरी समझ के खिलाफ चला जाता है, जिसे यूक्लिडियन मानदंड (जो यहां इस्तेमाल किए गए मॉड्यूलस से मेल खाता है) के रूप में निर्दिष्ट किया जाता है, वर्गों के योग की वर्ग जड़ है। मैं Mathworld's definition of the complex modulus का संदर्भ दूंगा।

क्या यह कुछ अन्य लोगों में भाग गया है? मैंने इसे ऑक्टेव से सी ++ तक कुछ सिग्नल प्रोसेसिंग कोड पोर्ट करने के परिणामस्वरूप पाया, और इस अंतर का संदर्भ पाने वाला एकमात्र अन्य स्थान जीसीसी मेलिंग सूची पर था (1-लिंक सीमा के कारण लिंक पोस्ट नहीं कर सकता)।

+3

चर्चा यहाँ (तथ्य यह है कि पेट() परिमाण एक और उत्तर में उल्लिखित है का उपयोग करते हुए): http://gcc.gnu.org/ml/gcc/2001-08 /msg01129.html – runexe

उत्तर

12

"मानक" शब्द का सी ++ उपयोग भ्रमित है, क्योंकि ज्यादातर लोग कभी भी वेक्टर रिक्त स्थान के संदर्भ में मानदंडों में आते हैं। यदि आप वास्तविक संख्याओं पर वेक्टर स्पेस के रूप में जटिल संख्या देखते हैं, तो यह निश्चित रूप से मानक नहीं है। सी ++ की निष्पक्षता में, std :: norm() फ़ंक्शन जटिल संख्याओं से वास्तविक संख्याओं तक तथाकथित की गणना करता है।

सौभाग्य से, std :: abs() फ़ंक्शन है, जो आप चाहते हैं।

+0

आह, मुझे फील्ड मानदंड से अवगत नहीं था - जो निश्चित रूप से समझ में आता है, या कम से कम एक व्यावहारिक स्पष्टीकरण प्रदान करता है कि उन्होंने इस तरह मानक() को परिभाषित क्यों किया। – runexe

+0

शायद यह सिर्फ एक संयोग था। –

+1

मुझे मैथवर्ल्ड याद है कि जटिल या जटिल जैसी संख्याओं के बारे में बात करते समय "मानक" का उपयोग संदिग्ध है। फ़ील्ड मानदंड के कुछ फायदे हैं जो कि केविन रीड द्वारा इंगित किए गए हैं, और यह भी तथ्य है कि यह संख्या फ़ील्ड में बंद है - "पूर्णांक परिसर" का सी ++ मानदंड एक पूर्णांक है, इसलिए पूर्णांक- केवल ops। –

5

संयोग से, यूक्लिडियन मानक वर्ग विशेष रूप से गेम भौतिकी में अनुकूलन के रूप में उपयोगी हो सकता है; यदि आप परिमाण/दूरी की तुलना करना चाहते हैं, या किसी अन्य कारण से रैखिकता की आवश्यकता नहीं है, तो आप वास्तविक दूरी की बजाय वर्ग दूरी के साथ काम कर सकते हैं, और वर्ग की जड़ों की गणना से बच सकते हैं।

norm(v1) < norm(v2)   instead of abs(v1) < abs(v2) 
norm(v) < CONSTANT_SQUARED instead of abs(v) < CONSTANT 

जीसीसी मेलिंग सूची पर

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